HTTP消息

HTTP基於客戶端 - 伺服器體系結構模型和無狀態請求/回應協議該協議通過可靠的TCP/IP連接交換消息來運行。

HTTP 客戶端是為了發送一個或多個HTTP請求消息而與伺服器建立連接的程式(Web流覽器或任何其他客戶端)。HTTP“伺服器”是一個程式(通常是Web伺服器,如Apache Web伺服器或Internet資訊服務IIS等),它接受連接以通過發送HTTP回應消息來提供HTTP請求。

HTTP利用統一資源識別字(URI)來標識給定資源並建立連接。建立連接後,HTTP消息的傳遞格式類似於Internet郵件[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]所使用的格式。這些消息包括從客戶端到伺服器的請求以及從伺服器到客戶端的回應,其具有以下格式 -

HTTP-message = <Request> | <Response> ; HTTP/1.1 messages

HTTP請求和HTTP回應使用RFC 822的通用消息格式來傳輸所需的數據。此通用消息格式包含以下四個專案 -

  • 一個起始行
  • 零個或多個標題字段後跟CRLF
  • 空行(即,CRLF之前沒有任何內容的行),表示標題字段的結尾
  • 可選的消息體

以下部分將解釋HTTP消息中使用的每個實體。

消息起始行

起始行將具有以下通用語法 -

start-line = Request-Line | Status-Line

我們將分別討論HTTP請求,以及HTTP回應消息時的Request-LineStatus-Line。現在讓我們看一下請求和回應的起始行示例 -

GET /hello.html HTTP/1.1     (這是客戶端發送的Request-Line)

HTTP/1.1 200 OK             (這是伺服器發送的狀態行)

標頭字段

HTTP標頭字段提供有關請求或回應的所需資訊,或有關在郵件正文中發送的對象的資訊。有以下四種類型的HTTP消息頭 -

  • 通用標頭 - 這些標頭字段具有用於請求和回應消息的一般適用性。
  • 請求標頭 - 這些標頭字段僅適用於請求消息。
  • 回應標頭 - 這些標頭字段僅適用於回應消息。
  • 實體標頭 - 這些標頭字段定義有關實體主體的元資訊,或者,如果沒有主體,則定義元資訊。

所有上述標題都遵循相同的通用格式,每個標題字段由一個名稱後跟冒號(:)和字段值組成,如下所示 -

message-header = field-name ":" [ field-value ]

以下是各種標題字段的示例 -

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.xuhuhu.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2019 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2019 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

消息正文

消息正文部分對於HTTP消息是可選的,但如果它可用,則它用於攜帶與請求或回應相關聯的實體主體。如果實體主體是關聯的,那麼通常Content-TypeContent-Length標題行指定相關主體的性質。

消息體是承載來自伺服器的實際HTTP請求數據(包括表單數據和上傳等)和HTTP回應數據的消息體(包括檔,圖像等)。以下是一個HTML格式消息正文的簡單內容 -

<html>
   <body>
      <h1>Hello, World!</h1>
   </body>
</html>

上一篇: HTTP協議基礎 下一篇: HTTPS協議基礎