1. 程式人生 > >結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議

結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議

原文地址:結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議 作者:Jelline


摘要:

    本文簡單介紹了Web應用層協議理論知識,詳細講述了HTTP請求報文和響應報文各個欄位含義,並從Wireshark俘獲分組中選取HTTP相關報文進行分析。


一、概述

    Web的應用層協議是超文字傳輸協議HTTP,HTTP協議由兩部分程式實現:客戶機程式、伺服器程式,協議定義了這些報文的格式以及客戶機和伺服器如何進行報文交換的。Web伺服器用於儲存Web物件,每個物件由URL定址,Web客戶機通常指瀏覽器。瀏覽器向伺服器發出對Web頁中所包含物件的HTTP請求報文,伺服器接受請求並用包含這些物件的HTTP響應報文進行響應。

Web頁是由物件組成,物件簡單來說就是檔案(如圖形檔案、Java小程式、聲音剪輯檔案),這些檔案通過一個URL地址定址。Web頁通常含有一個基本的HTML檔案和幾個引用物件。

    HTTP報文有兩種:請求報文、響應報文。

二、HTTP請求報文

2.1 請求報文

整個報文段內容是普通ASCII文字,各個欄位靠空格或者回車換行符隔開,如下圖:

圖1 HTTP請求報文格式

方法

表1 HTTP請求報文方法[1]

方法

說明

GET

請求獲取URL所標識的資源

POST

在URL所標識的資源後附加新的資料

HEAD

請求獲取由URL所標識的資源的響應訊息報頭,常用於故障跟蹤

PUT

請求伺服器儲存一個資源,並用URL作為其標識

DELETE

請求伺服器刪除URL所標識的資源

TRACE

請求伺服器回送收到的請求資訊,主要用於測試或診斷

CONNECT

保留將來使用

OPTIONS

請求查詢伺服器的效能,或者查詢與資源相關的選項和需求

    

使用GET方法時實體主體為空。客戶機有時候需要提交表單(如搜尋關鍵詞),有兩種方法可以做到這一點:其一,使用POST方法,實體主體包含表單欄位的值;其二,用GET方法,此時表單的欄位與原URL形成新的URL。

    注: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].

HTTP請求報文格式.rar