HTTP - 訊息



HTTP 基於客戶端-伺服器架構模型和無狀態請求/響應協議,透過在可靠的 TCP/IP 連線上交換訊息來執行。

HTTP“客戶端”是一個程式(Web 瀏覽器或任何其他客戶端),它建立與伺服器的連線,以傳送一個或多個 HTTP 請求訊息。HTTP“伺服器”是一個程式(通常是 Web 伺服器,例如 Apache Web Server 或 Internet Information Services IIS 等),它接受連線以透過傳送 HTTP 響應訊息來服務 HTTP 請求。

HTTP 使用統一資源識別符號 (URI) 來識別給定的資源並建立連線。連線建立後,**HTTP 訊息**以類似於網際網路郵件 [RFC5322] 和多用途網際網路郵件擴充套件 (MIME) [RFC2045] 使用的格式傳遞。這些訊息包括從客戶端到伺服器的**請求**和從伺服器到客戶端的**響應**,其格式如下:

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

HTTP 請求和 HTTP 響應使用 RFC 822 的通用訊息格式來傳輸所需的資料。此通用訊息格式包含以下四個專案。

  • A Start-line
  • Zero or more header fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

在以下部分,我們將解釋 HTTP 訊息中使用的每個實體。

訊息起始行

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

start-line = Request-Line | Status-Line

在分別討論 HTTP 請求和 HTTP 響應訊息時,我們將討論請求行和狀態行。現在,讓我們看看請求和響應情況下起始行的示例。

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

報頭欄位

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.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

訊息正文

訊息正文部分對於 HTTP 訊息是可選的,但如果可用,則用於攜帶與請求或響應關聯的實體正文。如果關聯了實體正文,則通常**Content-Type** 和**Content-Length** 報頭行指定關聯正文的性質。

訊息正文是承載實際 HTTP 請求資料(包括表單資料和上傳等)和來自伺服器的 HTTP 響應資料(包括檔案、影像等)的部分。下面顯示的是訊息正文的簡單內容:

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

接下來的兩章將利用上述概念來準備 HTTP 請求和 HTTP 響應。

廣告