HTTP協議基礎及報文抓包分析

前言

從事效能測試必不可繞過的就是協議,對基本知識的瞭解,還是深入掌握協議的機制,都能讓你在從事效能測試實施時顯得更加順手。

下面我們就HTTP協議及效能測試過程必須掌握的一些分析工具來進行分享。

重點分享效能測試實施過程中必須掌握的關鍵技術、工具。更細節的請參考HTTP相關書籍或RFC文件。

HTTP基本架構

下面我們用一張簡單的流程圖來展示HTTP協議基本架構,以便大家先有個基本的瞭解。

HTTP協議基礎及報文抓包分析

Web Client可以是瀏覽器、搜尋引擎、機器人等等一切基於HTTP協議發起http請求的工具。

Web Server可以是任何的能解析HTTP請求,並返回給Web Client可識別的響應的服務,常見的有apache、nginx、IIS等等web伺服器。

濃縮就是精華,看下最簡潔的HTTP互動圖:

HTTP協議基礎及報文抓包分析

HTTP報文結構

請求報文

HTTP請求報文由請求行、請求頭、空行和請求內容4個部分構成。

如下圖所示:

HTTP協議基礎及報文抓包分析

下面對上圖進行簡單的分析:

請求行

由請求方法欄位、URL欄位、協議版本欄位三部分構成,它們之間由空格隔開。常用的請求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

請求頭

請求頭由key/value對組成,每行為一對,key和value之間透過冒號(:)分割。請求頭的作用主要用於通知服務端有關於客戶端的請求資訊。

典型的請求頭有:

User-Agent:生成請求的瀏覽器型別

Accept:客戶端可識別的響應內容型別列表;星號*用於按範圍將型別分組。*/*表示可接受全部型別,type/*表示可接受type型別的所有子型別。

Accept-Language: 客戶端可接受的自然語言

Accept-Encoding: 客戶端可接受的編碼壓縮格式

Accept-Charset: 可接受的字符集

Host: 請求的主機名,允許多個域名繫結同一IP地址

connection:連線方式(close或keeplive)

Cookie: 儲存在客戶端的擴充套件欄位

空行

最後一個請求頭之後就是空行,用於告訴服務端以下內容不再是請求頭的內容了。

請求內容

請求內容主要用於POST請求,與POST請求方法配套的請求頭一般有Content-Type(標識請求內容的型別)和Content-Length(標識請求內容的長度)

響應報文

HTTP響應報文由狀態行、響應頭、空行和響應內容4個部分構成。

如下圖所示:

HTTP協議基礎及報文抓包分析

下面對響應報文格式進行簡要的分析說明:

狀態行

由HTTP協議版本、狀態碼、狀態碼描述三部分構成,它們之間由空格隔開。

狀態碼由3位數字組成,第一位標識響應的型別,常用的5大類狀態碼如下:

1xx:表示伺服器已接收了客戶端的請求,客戶端可以繼續傳送請求

2xx:表示伺服器已成功接收到請求並進行處理

3xx:表示伺服器要求客戶端重定向

4xx:表示客戶端的請求有非法內容

5xx:標識伺服器未能正常處理客戶端的請求而出現意外錯誤

常見狀態碼說明:

200 OK: 表示客戶端請求成功

400 Bad Request: 表示客戶端請求有語法錯誤,不能被伺服器端解析

404 Not Found:請求的資源不存在,例如輸入了錯誤的url

500 Internal Server Error: 表示伺服器發生了不可預期的錯誤,導致無法完成客戶端的請求

503 Service Unavailable:表示伺服器當前不能處理客戶端的請求,在一段時間後伺服器可能恢復正常

響應頭

一般情況下,響應頭會包含以下,甚至更多的資訊。

Location:伺服器返回給客戶端,用於重定向到新的位置

Server: 包含伺服器用來處理請求的軟體資訊及版本資訊

Vary:標識不可快取的請求頭列表

Connection: 連線方式。

對於請求端來講:close是告訴服務端,斷開連線,不用等待後續的求請了。keeplive則是告訴服務端,在完成本次請求的響應後,保持連線,等待本次連線後的後續請求。

對於響應端來講:close表示連線已經關閉。keeplive則表示連線保持中,可以繼續處理後續請求。Keep-Alive表示如果請求端保持連線,則該請求頭部資訊表明期望服務端保持連線多長時間(秒),例如300秒,應該這樣寫Keep-Alive: 300

空行

最後一個響應頭之後就是空行,用於告訴請求端以下內容不再是響應頭的內容了。

響應內容

服務端返回給請求端的文字資訊。

HTTP報文示例

在這裡我們在Firefox下用firebug隨意抓取一個HTTP包和上文的報文結構做下一一對應關係圖,以便大家瞭解實際的包和標準報文結構的對應關係。

HTTP協議基礎及報文抓包分析

總結

對於HTTP協議的互動過程這裡就不再進行說明了,大家可以搜尋下相關的資料進行學習,上述的內容請務必熟練掌握、深刻了解。更詳細的內容推薦大家學習RFC 2616(http協議1。1版本,有中文版本)

更多精彩:

工具篇 - JMeter之旅01

工具篇 - JMeter目錄及關鍵配置分析02

webdriver介紹&與Selenium RC的比較

Python Selenium Webdriver安裝手冊

建立你的第一個webdriver python程式碼

基於Excel引數化你的Selenium2測試

Python Selenium設計模式-POM

Python多執行緒Selenium跨瀏覽器測試

python selenium2示例 - 生成 HTMLTestRunner 測試報告

2017年軟體測試技術精選大集合