第一篇 HTTP 協議報文結構及示例


前言

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

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

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

HTTP  基本架構

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

  • Web Client 可以是瀏覽器、搜索引擎、機器人等等一切基於HTTP 協議發起 http 請求的工具。
  • Web Server 可以是任何的能解析 HTTP 請求,並返回給Web Client 可識別的響應的服務,常見的有 apache、nginx、IIS 等等 web 服務器

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

HTTP  報文結構

  • 請求報文:HTTP 請求報文由請求行、請求頭、空行和請求內容 4 個部分構成。如下圖所示:

下面對上圖進行簡單的分析:
請求行:由請求方法字段、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 協議版本、狀態碼、狀態碼描述三部分構成,它們之間由空格隔開。
狀態碼:由 3 位數字組成,第一位標識響應的類型,常用的 5 大類狀
態碼如下:

  • 1xx:表示服務器已接收了客戶端的請求,客戶端可以繼續發送請求
  • 2xx:表示服務器已成功接收到請求並進行處理
  • 3xx:表示服務器要求客戶端重定向
  • 4xx:表示客戶端的請求有==非法內容==
  • 5xx:標識服務器未能正常處理客戶端的請求而出現意外錯誤

常見狀態碼說明:

  • 200 OK: 表示客戶端請求成功
  • 400 Bad Request: 表示客戶端請求有語法錯誤,不能被服務器端解析
  • 401 Unauthonzed: 表示請求未經授權,該狀態碼必須與WWW-Authenticate 報文頭一起使用
  • 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

空行:最后一個響應頭之后就是空行,用於告訴請求端以下內容不再是響應頭的內容了。
響應內容:服務端返回給請求端的文本信息。

 P HTTP  報文示例

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM