最近我在做前端面試題總結系列,感興趣的朋友可以新增關注,歡迎指正、交流。
爭取每個知識點能夠多總結一些,至少要做到在面試時,針對每個知識點都可以侃起來,不至於啞火。
前言
在上一篇文章《HTTP 概述》中我們認識了 HTTP ,知道它是一個規範客戶端請求和服務端響應的應用層協議,今天,我們來學習一下它裡面的另一個重要概念——HTTP 訊息。
HTTP 訊息
HTTP 訊息是伺服器和客戶端之間交換資料的方式。
分類
HTTP 訊息分為兩類:
- 客戶端請求訊息(requests)—— 由客戶端傳送用來觸發一個伺服器上的動作。
- 服務端響應訊息(responses)—— 來自伺服器的應答。
構成
典型的 HTTP 訊息由以下四部分構成:
- 起始行(start line) —— 一行起始行用於描述要執行的請求,或者是對應的狀態,成功或失敗。這個起始行總是單行的。
- HTTP 頭(HTTP headers)—— 表示在 HTTP 請求或響應中的用來傳遞附加資訊的欄位,修改所傳遞的訊息(或者訊息主體)的語義,或者使其更加精確。
- 空行(empty line) —— 空行指示所有關於請求的後設資料已經傳送完畢。
- 資料體(body)—— 一個可選的包含請求相關資料的正文 (比如HTML表單內容), 或者響應相關的文件。
請求訊息和響應訊息的構成大體相同。
HTTP 頭欄位
HTTP 頭欄位(HTTP header fields)是指在超文字傳輸協議(HTTP)的請求和響應訊息中的訊息頭部分。
它們定義了一個超文字傳輸協議事務中的操作引數。
HTTP 頭部欄位可以自己根據需要定義,因此可能在 Web 伺服器和瀏覽器上發現非標準的頭欄位。
格式
HTTP 頭欄位是在請求(request)或響應(response)行(一條訊息的第一行內容)之後傳輸的。
協議頭的欄位特點是:
- 以明文的字串格式傳輸
- 是以冒號分隔的鍵名與鍵值對
- 以回車(CR)加換行(LF)符號序列結尾
- 協議頭部分的結尾以一個空白欄位標識,也就是傳輸兩個連續的 CR + LF。
分類
HTTP 頭欄位根據實際用途被分為以下 4 種型別:
- 通用頭欄位(General Header Fields)
- 請求頭欄位(Request Header Fields)
- 響應頭欄位(Response Header Fields)
- 實體頭欄位(Response Header Fields)
欄位值
某些欄位中可以包含註釋內容(例如User-Agent、Server和Via欄位中),這些註釋內容可由應用程式忽略。
很多欄位的值中可以包含帶有權重的質量(quality,常被簡稱為Q)的鍵值對,指定的“重量”會在內容協商的過程中使用。
大小限制
標準中沒有對每個協議頭欄位的名稱和值的大小設定任何限制,也沒有限制欄位的個數。
然而,出於實際場景及安全性的考慮,大部分的伺服器、客戶端和代理軟體都會實施一些限制。
例如,Apache 2.3伺服器在預設情況下限制每個欄位的大小不得超過8190位元組,同時,單個請求中最多有100個頭欄位。
總結
HTTP 訊息分為請求訊息和響應訊息,完整的訊息由四部分組成。
HTTP 頭可以分為四類。
~
~ 本文完,感謝閱讀!
~
學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!
大家好,我是〖程式設計三昧〗的作者 隱逸王,我的公眾號是『程式設計三昧』,歡迎關注,希望大家多多指教!
你來,懷揣期望,我有墨香相迎! 你歸,無論得失,唯以餘韻相贈!
知識與技能並重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!
本作品採用《CC 協議》,轉載必須註明作者和本文連結