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請求,從xuhuhu.com
上運行的web伺服器獲取hello.html
頁面 -
GET /hello.html HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.xuhuhu.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.xuhuhu.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.xuhuhu.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>