1. 程式人生 > 其它 >http協議:三 (2)http報文是什麼樣子

http協議:三 (2)http報文是什麼樣子

HTTP 協議在規範文件裡詳細定義了報文的格式,規定了組成部分,解析規則,還有處理策略,所以可以在 TCP/IP 層之上實現更靈活豐富的功能,例如連線控制,快取管理、資料編碼、內容協商等等。

請求行
GET / HTTP/1.1

狀態行
HTTP/1.1 200 OK

HTTP 協議規定了非常多的頭部欄位,實現各種各樣的功能,但基本上可以分為四大類:

通用欄位:在請求頭和響應頭裡都可以出現;

請求欄位:僅能出現在請求頭裡,進一步說明請求資訊或者額外的附加條件;

響應欄位:僅能出現在響應頭裡,補充說明響應報文的資訊;

實體欄位:它實際上屬於通用欄位,但專門描述 body 的額外資訊。

HTTP 報文結構就像是“大頭兒子”,由“起始行 + 頭部 + 空行 + 實體”組成,簡單地說就是“header+body”;

HTTP 報文可以沒有 body,但必須要有 header,而且 header 後也必須要有空行,形象地說就是“大頭”必須要帶著“脖子”;

請求頭由“請求行 + 頭部欄位”構成,響應頭由“狀態行 + 頭部欄位”構成;

請求行有三部分:請求方法,請求目標和版本號;

狀態行也有三部分:版本號,狀態碼和原因字串;

頭部欄位是 key-value 的形式,用“:”分隔,不區分大小寫,順序任意,除了規定的標準頭,也可以任意新增自定義欄位,實現功能擴充套件;

HTTP/1.1 裡唯一要求必須提供的頭欄位是 Host,它必須出現在請求頭裡,標記虛擬主機名。

Host:請求欄位,只能出現在請求頭。是必須出現的欄位
User-Agent:是請求欄位,只能出現在請求頭裡。
Date:是通用欄位,通常出現在響應頭,標識HTTP報文建立的時間,客戶端可以使用這個時間再搭配其他欄位決定快取策略
Server欄位是響應欄位,只能出現在響應頭裡。告訴客戶端當前正在提供Web服務的軟體名稱和版本號。
Content-Length:標識報文裡body的長度。