安全測試 - HTTP 訊息



HTTP訊息

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

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

HTTP使用統一資源識別符號(URI)來標識給定的資源並建立連線。一旦建立連線,HTTP訊息就會以類似於網際網路郵件[RFC5322]和多用途網際網路郵件擴充套件(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響應訊息時,我們將討論請求行和狀態行。現在讓我們看看請求和響應情況下起始行的示例:

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-TypeContent-Length報頭行指定關聯主體的性質。

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

<html>
   <body>
      <h1>Hello, World!</h1>
   </body>
</html>
http_protocol_basics.htm
廣告