結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議
原文地址:結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議 作者:Jelline
摘要:
本文簡單介紹了Web應用層協議理論知識,詳細講述了HTTP請求報文和響應報文各個欄位含義,並從Wireshark俘獲分組中選取HTTP相關報文進行分析。
一、概述
Web的應用層協議是超文字傳輸協議HTTP,HTTP協議由兩部分程式實現:客戶機程式、伺服器程式,協議定義了這些報文的格式以及客戶機和伺服器如何進行報文交換的。Web伺服器用於儲存Web物件,每個物件由URL定址,Web客戶機通常指瀏覽器。瀏覽器向伺服器發出對Web頁中所包含物件的HTTP請求報文,伺服器接受請求並用包含這些物件的HTTP響應報文進行響應。
HTTP報文有兩種:請求報文、響應報文。
二、HTTP請求報文
2.1 請求報文
整個報文段內容是普通ASCII文字,各個欄位靠空格或者回車換行符隔開,如下圖:
圖1 HTTP請求報文格式
方法
表1 HTTP請求報文方法[1]
方法 |
說明 |
GET |
請求獲取URL所標識的資源 |
POST |
在URL所標識的資源後附加新的資料 |
HEAD |
請求獲取由URL所標識的資源的響應訊息報頭,常用於故障跟蹤 |
PUT |
請求伺服器儲存一個資源,並用URL作為其標識 |
DELETE |
請求伺服器刪除URL所標識的資源 |
TRACE |
請求伺服器回送收到的請求資訊,主要用於測試或診斷 |
CONNECT |
保留將來使用 |
OPTIONS |
請求查詢伺服器的效能,或者查詢與資源相關的選項和需求 |
注:HTTP/1.0規約僅有三種方法:GET、POST、HEAD。
URL
物件由統一資料定位器URL標識,URL由3部分組成(如http://www.baidu.com/index.html):協議(http)、存放物件伺服器主機名(www.baidu.com)、物件的路徑名(/index.html)。
版本
目前有HTTP/1.0、HTTP/1.1,後者相容前者。HTTP/1.0僅支援非持續連線,即每個TCP連線在伺服器返回物件後關閉,HTTP/1.1支援持續連線,即伺服器在傳送響應後保持該TCP連線。早期,Web頁面通常只包含HTML檔案,用非持續連線就夠了。如今,一個Web頁面包含許多物件,用非持續連線開銷太大了(TCP建立的三次握手),因此持續連線更合適。
首部行
給伺服器傳送首部行旨在伺服器為不同型別的客戶機發送相同物件的不同版本,常用的首部行見表2。
表2 HTTP請求報文常用首部行
欄位名 |
值 |
User-Agent |
關於瀏覽器和它的平臺資訊 |
Accept |
客戶機能處理的頁面型別 |
Accept-Charset |
客戶機可以接受的字符集 |
Aceept-Encoding |
客戶機能處理的頁面編碼方法 |
Accept-Language |
客戶機能處理的自然語言 |
Host |
伺服器的DNS名字 |
Authorization |
證明客戶端有權檢視某個資源 |
Cookie |
將一個以前設定的cookie送回給伺服器 |
實體資料
實體資料是報文的主體,即所請求的物件本身。
2.2 例項分析
圖2 HTTP請求報文例項
三、HTTP響應報文
3.1 報文格式
圖3 HTTP響應報文格式
版本
伺服器使用的協議版本。
狀態編碼、短語
狀態編碼碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值[1]:
表3 HTTP響應報文響應類別及值
類別 |
值 |
1xx |
指示資訊--表示請求已接收,繼續處理 |
2xx |
成功--表示請求已被成功接收、理解、接受 |
3xx |
重定向--要完成請求必須進行更進一步的操作 |
4xx |
客戶端錯誤--請求有語法錯誤或請求無法實現 |
5xx |
伺服器端錯誤--伺服器未能實現合法的請求 |
常見狀態程式碼、狀態描述、說明:
表4 HTTP響應報文常用程式碼
編碼 |
短語 |
說明 |
200 |
OK |
客戶端請求成功 |
400 |
Bad Request |
客戶端請求有語法錯誤,不能被伺服器所理解 |
401 |
Unauthorized |
請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 |
403 |
Forbidden |
伺服器收到請求,但是拒絕提供服務 |
404 |
Not Found |
請求資源不存在 |
500 |
Internal Server Error |
伺服器發生不可預期的錯誤 |
503 |
Server Unavailable |
伺服器當前不能處理客戶端的請求,一段時間後,可能恢復正常 |
首部行
常用的HTTP響應報文首部行見下表:
表5 響應報文常用首部行欄位
欄位名 |
值 |
Date |
訊息被髮送時的日期和時間 |
Server |
關於伺服器資訊 |
Content-Encoding |
內容是如何被編碼的(如gzip) |
Content-Length |
以位元組計算的頁面長度 |
Content-Type |
頁面的MIME型別 |
Last-Modified |
頁面最後被修改的時間和日期 |
Location |
指標客戶將請求傳送到別處的命令 |
Accept-Ranges |
伺服器將接受指定請求的位元組範圍 |
Set-Cookie |
伺服器希望客戶儲存一份cookie |
實體資料
實體資料是報文的主體,即所請求的物件本身。
3.2 報文例項
圖2 HTTP響應報文例項
至此,伺服器返回使用者所請求的檔案:-)
參考資料:
[1] 博文《HTTP協議詳解》
[2] Andrew S.Tanenbaum.計算機網路[M].
[3] 《計算機網路--自頂向下方法與Internet特色》[M].