結合Wireshark捕獲分組深入理解TCP/IP協議棧之HTTP協議
摘要:
本文簡單介紹了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].
from:http://blog.chinaunix.net/uid-9112803-id-3212057.html
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成