1. 程式人生 > 實用技巧 >http學習筆記1:什麼是http報文,http報文結構是什麼?

http學習筆記1:什麼是http報文,http報文結構是什麼?

說到Http報文,其實Http報文可以分為兩種分別是請求報文響應報文他們的結構都基本相同:

  1. 起始行(start line):用來描述請求或相應的基本資訊
  2. 頭部資訊(header):使用kv結構更詳細的說明報文
  3. 訊息正文(entity):實際傳輸的資料

其中的起始行和頭部資訊經常合稱為請求頭或者響應頭,訊息正文成為實體也就是body。Http協議規定報文中必須有header,但是可以沒有body。header和body中間使用一個空行分隔。

請求行

請求報文

請求報文中的請求行分為三部分:

  1. 請求方式:GET POST等
  2. 請求目標的URI / /abc.html 等
  3. 版本號:表示報文中使用的http協議版本

舉一個完整的請求報文樣式:

get /abc.html http/1.1

響應報文

響應報文中的起始行稱為狀態行,意思是伺服器的響應狀態。狀態行也分為三部分:

  1. 版本號:表示報文用的http協議版本號
  2. 狀態碼:一個三位數字,以程式碼的形式來說明伺服器的響應結果。如 200 404 502等等
  3. 原因:作為狀態碼的補充說明,增加可讀性。

舉個響應報文中的狀態行的例子:

http/1.1 404 Not Found

頭部資訊

起始行+頭部欄位集合就構成了http報文中完成的請求頭或響應頭,他們倆唯一的區別就是起始行不一致。具體不一致的內容可以參見第一部分。

頭部欄位為key: value格式,kv之前使用:

分割。頭部欄位有五個特點:

  1. 欄位名不區分大小寫,但是為了方便檢視建議還是首字母大寫
  2. 欄位名中不允許出現空格和下劃線,如果希望將兩個單詞連線起來,可以使用-連結,如:Content-Length
  3. 欄位名之後需要緊接:,如果中間出現空格就會報錯
  4. 欄位的順序沒有意義
  5. 原則上欄位名不能重複,除非有特殊予以的欄位,比如Set-Cookie

頭欄位通常分為四種:

  1. 通用欄位:在請求頭和響應頭中都可以出現,如Date
  2. 請求欄位,僅僅能出現在請求頭中,如Host、User-Agent
  3. 相應欄位:僅僅能出現在響應頭中,如Server
  4. 實體欄位,屬於通用欄位,但是實體欄位是專們用來描述body的額外資訊的,如Content-Length