寫在前面
我們在絕大部分使用HTTP服務的場景中,都是利用瀏覽器或者請求發(fā)送工具(Postman)來構(gòu)造HTTP請求報文,并由這些工具接收響應報文,最終根據(jù)一定規(guī)則渲染報文的效果(二進制流、文件、圖片、或普通web界面)。那么HTTP協(xié)議到底是怎么工作的呢?或者說一次HTTP的請求事務過程是怎樣的呢?下面我們利用【telnet】命令來探究HTTP事務的執(zhí)行過程。
Telnet與HTTP
由于HTTP使用了TCP/IP 傳輸協(xié)議,而且它是基于文本的,沒有使用那些難以理解的二進制格式,因此很容易直接與Web服務器進行對話。Telnet程序可以將(本地)鍵盤連接到某個目標(遠端或本地)TCP端口,并將此TCP端口的輸出回送到顯示屏(本地)上。Telnet常用于遠程終端會話,但它幾乎可以連接所有的TCP服務器,包括HTTP服務器。可以通過Telnet程序直接與Web服務器進行對話。通過Telnet可以打開一條到某臺機器上某個端口的TCP連接,然后直接向那個端口輸入一些字符(命令)。Web服務器會將Telnet程序作為一個Web客戶端來處理,所有回送給TCP連接的數(shù)據(jù)都會顯示在(本地)顯示屏上。
??我們用Telnet與一個實際的Web服務器進行交互。我們要用Telnet獲取URL www.lxweimin.com/index 所指向的文檔。下面我們來說明一下會發(fā)生什么情況:
- 首先,查找 www.lxweimin.com 的IP地址,打開一條到那臺機器端口80的TCP連接。Telnet會為我們完成那些“跑腿兒”的工作。
- 一旦打開了TCP連接,就要輸入HTTP請求了。
- 請求結(jié)束(由一個空行表示)之后,服務器會在一條HTTP響應中將內(nèi)容回送并關(guān)閉連接。
Telnet模擬HTTP客戶端開啟HTTP事務
下面是使用Telnet的HTTP事務圖:
Telnet模擬HTTP客戶端開啟HTTP事務示意圖
??Telnet會查找主機名(使用DNS找到對應的IP地址)并打開一條連接,連接到在 www.lxweimin.com 的端口80 上監(jiān)聽的Web服務器。這條命令之后的三行內(nèi)容是Telnet的輸出,告訴我們它已經(jīng)建立了連接。
??然后我們輸入最基本的請求命令 GET /index HTTP/1.1,發(fā)送一個提供了遠端主機名的Host首部,后面跟上一個空行,請求從服務器 www.lxweimin.com 上獲取資源 /index。隨后,服務器會以一個響應行、幾個響應首部、一個空行和最后面的HTML文檔主體來應答。