天天看點

http協定_封包格式

請求封包

請求封包主要分為三部分,請求首行(request line), 請求頭部(request header), 請求體(request body). 請求行與請求頭部通過一個換行隔開,請求頭部和請求體之間通過一個空行隔開.

請求首行

請求行由"請求方法"、"URL"和"HTTP協定版本"3個字段組成,之字段間用空格分隔.

http協定_封包格式

響應封包

響應封包同樣主要分為三部分,響應首行(request line), 響應頭部(request header), 響應體(request body). 首行與響應頭部通過一個換行隔開,響應頭部和響應體之間通過一個空行隔開.

響應首行

響應首行一般由"協定版本"、"狀态碼"及其"描述資訊"組成,之間以空格分割.

http協定_封包格式

HTTP頭部

http協定中,有 4 種類型的首部字段:通用首部字段、請求首部字段、響應首部字段和實體首部字段

通用首部字段:

既可以出現在請求封包中,也可以出現在響應封包中,它提供了與封包相關的最基本的資訊

  • Cache-Control:用于控制緩存的行為
  • Connection:控制不再轉發給代理的首部字段、管理持久連接配接
  • Date:提供日期和時間标志,說明封包是什麼時間建立的
  • MIME-Version:給出了發送端使用的MIME版本
  • Trailer:如果封包采用了分塊傳輸編碼方式,就可以用這個首部列出位于封包拖挂部分的首部集合
  • Transfer-Encoding:封包主體的傳輸編碼方式
  • Update:給出更新為其他協定
  • Via:顯示了封包經過的中間節點(代理、網關)
  • Pragma:封包指令
  • Warning:錯誤通知

請求首部字段:

隻在請求封包中有意義的頭部,用于說明是誰或什麼在發送請求、請求源自何處,或者用戶端的喜好及能力

  • Accept:告訴伺服器能夠發送哪些媒體類型
  • Accept-Charset:告訴伺服器能夠發送哪些字元集
  • Accept-Encoding:告訴伺服器能夠發送哪些編碼方式
  • Accept-Language:告訴伺服器能夠發送哪些語言
  • Authorization:Web 認證資訊,以便對其自身進行認證的資料
  • Client-IP:提供了運作用戶端的機器的IP位址
  • Expect:列出某請求所要求的伺服器行為
  • From:提供了用戶端使用者的E-mail位址
  • Host:請求資源所在伺服器,給出伺服器的主機名和端口号
  • If-Match:與實體标記(ETag)作比較,如果實體标記與文檔目前的實體标記相比對,就擷取這份文檔
  • If-None-Match:比較實體标記(與 If-Match 相反),如果提供的實體标記與目前文檔的實體标記不相符,就擷取文檔
  • If-Modified-Sinec:比較資源的更新時間(Last-Modified),除非在某個指定的日期之後資源被修改過,否則就限制這個請求
  • If-Unmodified-Since:除非在某個指定日期之後資源沒有被修改過,否則就限制這個請求
  • Range:實體的位元組範圍請求,如果伺服器支援範圍請求,就請求資源的指定範圍
  • If-Range:資源未更新時發送實體 Byte 的範圍請求,允許對文檔的某個範圍進行條件請求
  • Referer:對請求中 URI 的原始擷取方, 提供了包含目前請求URI的文檔的URL
  • UA-Color:提供了與用戶端顯示器的顯示顔色有關的資訊
  • UA-CPU:給出了用戶端CPU的類型或制造商
  • UA-OS:給出了運作在用戶端機器上的作業系統名稱及版本
  • UA-Pixels:HTTP 用戶端程式的資訊, 提供了用戶端顯示器的像素資訊
  • User-Agent:将發起請求的應用程式名稱告知伺服器       
  • TE:傳輸編碼的優先級,告訴伺服器可以使用那些擴充傳輸編碼
  • Cookie:用戶端用它向伺服器傳送資料
  • Cookie2:用來說明請求端支援的cookie版本
  • Max-Forward:最大傳輸逐跳數,在通往源端伺服器的路徑上,将請求轉發給其他代理或網關的最大次數
  • Proxy-Authorization:代理伺服器要求用戶端的認證資訊,這個首部在與代理進行認證時使用的
  • Proxy-Connection:這個首部是在與代理建立連接配接時使用的

響應首部字段:

為用戶端提供了一些額外資訊,比如誰在發送響應、響應者的功能,甚至與響應相關的一些特殊指令

  • Age:(從最初建立開始)響應持續時間
  • Accept-Ranges:是否接受位元組範圍請求
  • Public:伺服器為其資源支援的請求方法清單
  • Retry-After:如果資源不可用的話,在此日期或時間重試
  • Server:伺服器應用程式軟體的名稱和版本
  • Title:對HTML文檔來說,就是HTML文檔的源端給出的标題
  • Warning:比原因短語更詳細一些的警告封包
  • Vary:伺服器會根據這些首部的内容挑選出最适合的資源版本發送給用戶端
  • Proxy-Authenticate:來自代理的對用戶端的質詢清單
  • Set-Cookie:在用戶端設定資料,以便伺服器對用戶端進行辨別
  • Set-Cookie2:與Set-Cookie類似
  • WWW-Authenticate:來自伺服器的對用戶端的質詢清單

實體首部字段:

描述主體的長度和内容,或者資源自身

  • Allow:列出了可以對此實體執行的請求方法
  • Location:告知用戶端實體實際上位于何處,用于将接收端定向到資源的位置(URL)上去
  • Content-Base:解析主體中的相對URL時使用的基礎URL
  • Content-Encoding:對主體執行的任意編碼方式
  • Content-Language:了解主體時最适宜使用的自然語言
  • Content-Length:主體的長度
  • Content-Location:資源實際所處的位置
  • Content-MD5:主體的MD5校驗和
  • Content-Range:在整個資源中此實體表示的位元組範圍
  • Content-Type:這個主體的對象類型
  • ETag:與此實體相關的實體标記
  • Expires:實體不再有效,要從原始的源端再次擷取實體的日期和時間
  • Last-Modified:這個實體最後一次被修改的日期和時間