HTTP請求

2019-10-16 22:03:34

HTTP用戶端以請求訊息的形式向伺服器傳送HTTP請求,其中包括以下格式 -

  • 請求行。
  • 零個或多個檔頭(常規|請求|實體)欄位後跟CRLF。
  • 空行(CRLF前面沒有任何內容的行),表示標題欄位的結尾。
  • 可選的訊息主體。

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

訊息請求行

Request-Line以方法標記開頭,後跟Request-URI,協定版本,以CRLF結尾。元素由空格SP字元分隔。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

下面我們將討論Request-Line中提到的每個部分。

請求方法

請求方法指示對由給定Request-URI標識的資源執行的方法。該方法區分大小寫,應始終以大寫形式提及。HTTP/1.1支援以下方法 -

編號 方法 描述
1 GET 它用於使用給定的URI從給定伺服器檢索資訊。使用GET的請求應僅檢索資料,並且不應對資料產生其他影響。
2 HEAD 它與GET相同,但僅傳輸狀態行和檔頭部分。
3 POST 它用於將資料傳送到伺服器。例如,使用HTML表單的客戶資訊,檔案上載等。
4 PUT 它用上傳的內容替換目標資源的所有當前表示。
5 DELETE 它刪除URI給出的目標資源的所有當前表示。
6 CONNECT 它建立到由給定URI標識的伺服器的通道。
7 OPTIONS 它描述了目標資源的通訊選項。
8 TRACE 它沿著目標資源的路徑執行訊息環回測試。

請求URI

Request-URI是統一資源識別符號,用於標識必須應用請求的資源。以下是指定URI的最常用表單 -

Request-URI = "*" | absoluteURI | abs_path | authority
  • * - 當HTTP請求不適用於特定資源但使用伺服器本身時,使用星號*。僅當方法不一定適用於資源時才允許。例如,OPTIONS * HTTP/1.1
  • absoluteURI - 在向代理發出HTTP請求時使用absoluteURI。請求代理轉發請求或從有效快取中為其提供服務,並返回響應。例如,GET https://www.w3.org/pub/WWW/TheProject.html HTTP / 1.1
  • Request-URI的最常見形式是用於標識源伺服器或閘道器上的資源。例如,希望直接從源伺服器檢索上述資源的用戶端將建立到主機www.w3.org的埠80的TCP連線並行送線路 - GET /pub/WWW/TheProject.html HTTP/1.1

請求檔頭欄位

request-header欄位允許用戶端將有關請求以及用戶端本身的其他資訊傳遞給伺服器。這些欄位充當請求修飾符,並且可以使用以下重要的Request-header欄位,可根據要求使用 -

  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Authorization
  • Expect
  • From
  • Host
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Max-Forwards
  • Proxy-Authorization
  • Range
  • Referer
  • TE
  • User-Agent

您可以引入自定義欄位,以防您要編寫自己的自定義用戶端和Web伺服器。

請求訊息範例

現在把它們放在一起形成一個HTTP請求,從tw511.com上執行的web伺服器獲取hello.html頁面 -

GET /hello.html HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tw511.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

這裡沒有向伺服器傳送任何請求資料,因為我們從伺服器獲取指定的一個HTML頁面。Connection是一個通用檔頭,其餘所有檔頭都是請求檔頭。以下是使用請求訊息正文將表單資料傳送到伺服器的另一個範例 -

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tw511.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

licenseID = string&content = string&/paramsXML = string

這裡,給定的URL /cgi-bin/process.cgi用於處理傳遞的資料,因此返回響應。內容型別告訴伺服器傳遞資料的是簡單的Web表單資料,長度是放在訊息正文中的資料的實際長度。以下範例顯示了如何將XML傳遞到Web伺服器 -

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tw511.com
Content-Type: text/xml; charset = utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<?xml version = "1.0" encoding = "utf-8"?>
<string xmlns = "http://clearforest.com/">string</string>