[前端 · 面試 ]HTTP 總結(二)—— HTTP 訊息

程式設計三昧發表於2021-08-02

最近我在做前端面試題總結系列,感興趣的朋友可以新增關注,歡迎指正、交流。

爭取每個知識點能夠多總結一些,至少要做到在面試時,針對每個知識點都可以侃起來,不至於啞火。

前端·面試·http總結.004

前言

在上一篇文章《HTTP 概述》中我們認識了 HTTP ,知道它是一個規範客戶端請求和服務端響應的應用層協議,今天,我們來學習一下它裡面的另一個重要概念——HTTP 訊息。

HTTP 訊息

HTTP 訊息是伺服器和客戶端之間交換資料的方式。

分類

HTTP 訊息分為兩類:

  • 客戶端請求訊息(requests)—— 由客戶端傳送用來觸發一個伺服器上的動作。
  • 服務端響應訊息(responses)—— 來自伺服器的應答。

構成

HTTPMsgStructure2

典型的 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 協議》,轉載必須註明作者和本文連結

相關文章