HTTP訊息

2019-10-16 22:03:33

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.tw511.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>