http學習筆記1:什麼是http報文,http報文結構是什麼?
阿新 • • 發佈:2020-07-17
說到Http報文,其實Http報文可以分為兩種分別是請求報文和響應報文他們的結構都基本相同:
- 起始行(start line):用來描述請求或相應的基本資訊
- 頭部資訊(header):使用kv結構更詳細的說明報文
- 訊息正文(entity):實際傳輸的資料
其中的起始行和頭部資訊經常合稱為請求頭或者響應頭,訊息正文成為實體也就是body。Http協議規定報文中必須有header,但是可以沒有body。header和body中間使用一個空行分隔。
請求行
請求報文
請求報文中的請求行分為三部分:
- 請求方式:GET POST等
- 請求目標的URI / /abc.html 等
- 版本號:表示報文中使用的http協議版本
舉一個完整的請求報文樣式:
get /abc.html http/1.1
響應報文
響應報文中的起始行稱為狀態行,意思是伺服器的響應狀態。狀態行也分為三部分:
- 版本號:表示報文用的http協議版本號
- 狀態碼:一個三位數字,以程式碼的形式來說明伺服器的響應結果。如 200 404 502等等
- 原因:作為狀態碼的補充說明,增加可讀性。
舉個響應報文中的狀態行的例子:
http/1.1 404 Not Found
頭部資訊
起始行+頭部欄位集合就構成了http報文中完成的請求頭或響應頭,他們倆唯一的區別就是起始行不一致。具體不一致的內容可以參見第一部分。
頭部欄位為key: value格式,kv之前使用:
- 欄位名不區分大小寫,但是為了方便檢視建議還是首字母大寫
- 欄位名中不允許出現空格和下劃線,如果希望將兩個單詞連線起來,可以使用-連結,如:Content-Length
- 欄位名之後需要緊接:,如果中間出現空格就會報錯
- 欄位的順序沒有意義
- 原則上欄位名不能重複,除非有特殊予以的欄位,比如Set-Cookie
頭欄位通常分為四種:
- 通用欄位:在請求頭和響應頭中都可以出現,如Date
- 請求欄位,僅僅能出現在請求頭中,如Host、User-Agent
- 相應欄位:僅僅能出現在響應頭中,如Server
- 實體欄位,屬於通用欄位,但是實體欄位是專們用來描述body的額外資訊的,如Content-Length