HTTP頭欄位提供有關請求或響應或消息正文中發送的對象的必需信息。有四種類型的HTTP消息頭:
常規頭:這些頭欄位對請求和響應消息都具有通用性。
客戶端請求頭:這些頭欄位僅適用於請求消息。
伺服器響應頭:這些頭欄位僅適用於響應消息。
實體頭:這些頭欄位定義實體體的元信息,如果沒有實體,則定義請求標識的資源的元信息。
General Headers
Cache-Control
Cache Control general header欄位用於指定所有緩存系統必須遵守的指令。語法如下:
Cache-Control : cache-request-directive|cache-response-directive
HTTP客戶機或伺服器可以使用緩存控制常規頭來指定緩存參數或從緩存中請求某些類型的文檔。緩存指令在逗號分隔的列表中指定。例如:
Cache-control: no-cache
下表列出了客戶端可以在其HTTP請求中使用的重要緩存請求指令:
S.N. | Cache Request Directive and Description |
---|---|
1 | no-cache 在未成功與源伺服器重新驗證之前,緩存不能使用響應來滿足後續請求。 |
2 | no-store 緩存不應存儲有關客戶端請求或伺服器響應的任何內容。 |
3 | max-age = seconds 表示客戶端願意接受其時間不大於以秒爲單位的指定時間的響應。 |
4 | max-stale [ = seconds ] 表示客戶端願意接受已超過其過期時間的響應。如果給定秒數,則其過期時間不得超過該時間。 |
5 | min-fresh = seconds 表示客戶端願意接受其新鮮度生存期不小於其當前年齡加上以秒爲單位的指定時間的響應。 |
6 | no-transform 不轉換實體體。 |
7 | only-if-cached 不檢索新數據。只有當文檔在緩存中時,緩存才能發送該文檔,並且不應與源伺服器聯繫以查看是否存在較新的副本。 |
伺服器可以在其HTTP響應中使用以下重要的緩存響應指令:
S.N. | Cache Response Directive and Description |
---|---|
1 | public 指示任何緩存都可以緩存響應。 |
2 | private 指示響應消息的全部或部分是爲單個用戶準備的,不能由共享緩存緩存。 |
3 | no-cache 在未成功與源伺服器重新驗證之前,緩存不能使用響應來滿足後續請求。 |
4 | no-store 緩存不應存儲有關客戶端請求或伺服器響應的任何內容。 |
5 | no-transform 不轉換實體體。 |
6 | must-revalidate 緩存在使用之前必須驗證過期文檔的狀態,並且不應使用過期文檔。 |
7 | proxy-revalidate proxy revalidate指令的含義與must-revalidate指令相同,只是它不適用於非共享用戶代理緩存。 |
8 | max-age = seconds 表示客戶端願意接受其時間不大於以秒爲單位的指定時間的響應。 |
9 | s-maxage = seconds 此指令指定的最大使用期限將覆蓋由max age指令或Expires頭指定的最大使用期限。私有緩存總是忽略s-maxage指令。 |
Connection
Connection general header欄位允許發送方指定特定連接所需的選項,並且不能通過代理通過其他連接進行通信。以下是使用連接頭的簡單語法:
Connection : "Connection"
HTTP/1.1定義了「關閉」連接選項,供發送方在響應完成後發出關閉連接的信號。例如:
Connection: close
默認情況下,HTTP 1.1使用持久連接,在這種情況下,連接不會在事務之後自動關閉。另一方面,HTTP 1.0在默認情況下沒有持久連接。如果1.0客戶機希望使用持久連接,則使用keep alive參數,如下所示:
Connection: keep-alive
Date
所有HTTP日期/時間戳必須以格林威治標準時間(GMT)表示,沒有例外。允許HTTP應用程式使用以下三種日期/時間戳表示形式之一:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
在這裡,第一種格式是最受歡迎的格式。
Pragma
Pragma general header欄位用於包含特定於實現的指令,這些指令可能應用於請求/響應鏈上的任何收件人。例如:
Pragma: no-cache
HTTP/1.0中定義的唯一指令是no-cache指令,並在HTTP 1.1中維護該指令以實現向後兼容性。將來不會定義新的Pragma指令。
拖車
拖車 general欄位值指示給定的頭欄位集存在於用分塊傳輸編碼編碼的消息的尾部中。以下是尾部頭欄位的語法:
拖車 : field-name
尾部標題欄位中列出的郵件標題欄位不能包含以下標題欄位:
傳輸編碼
內容長度
拖車
傳輸編碼
The 傳輸編碼 general-header field indicates what type of transformation has been applied to the message body in order to safely transfer it between the sender and the recipient. This is not the same as content-encoding because transfer-encodings are a property of the message, not of the entity-body. The syntax of 傳輸編碼 header field is as follows:
傳輸編碼: chunked
所有傳輸編碼值都不區分大小寫。
Upgrade
Upgradegeneral頭允許客戶機指定它支持哪些附加通信協議,如果伺服器發現它適合交換協議,則可以使用哪些附加通信協議。例如:
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Upgrade header欄位旨在爲從HTTP/1.1轉換到其他不兼容協議提供一種簡單的機制。
Via
網關和代理必須使用Via常規頭來指示中間協議和收件人。例如,請求消息可以從HTTP/1.0用戶代理髮送到名爲「fred」的內部代理代碼,後者使用HTTP/1.1將請求轉發到nowhere.com上的公共代理,後者通過將請求轉發到www.ics.uci.edu上的源伺服器來完成請求。然後,www.ics.uci.edu接收到的請求將具有以下Via header欄位:
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Upgrade header欄位旨在爲從HTTP/1.1轉換到其他不兼容協議提供一種簡單的機制。
Warning
警告常規頭用於攜帶有關消息狀態或轉換的附加信息,這些信息可能不會反映在消息中。響應可能包含多個警告標題。
Warning : warn-code SP warn-agent SP warn-text SP warn-date
Client Request Headers
Accept
Accept請求頭欄位可用於指定響應可接受的某些媒體類型。一般語法如下:
Accept: type/subtype [q=qvalue]
多個媒體類型可以用逗號分隔,可選的qvalue表示接受類型的可接受質量級別,範圍爲0到1。下面是一個例子:
Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
這將被解釋爲文本/html和文本/x-c並且是首選媒體類型,但是如果它們不存在,則發送文本/x-dvi實體,如果不存在,則發送文本/plain實體。
Accept-Charset
Accept Charset請求頭欄位可用於指示響應可接受的字符集。以下是通用語法:
Accept-Charset: character_set [q=qvalue]
多個字符集可以用逗號分隔列出,可選的qvalue表示按0到1的比例表示非引用字符集的可接受質量級別。下面是一個例子:
Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
特殊值「*」如果出現在接受字符集欄位中,則與每個字符集匹配;如果不存在接受字符集標題,則默認爲任何字符集都是可接受的。
Accept-Encoding
接受編碼請求頭欄位與接受類似,但限制響應中可接受的內容編碼。一般語法爲:
Accept-Encoding: encoding types
示例如下:
Accept-Encoding: compress, gzip Accept-Encoding: Accept-Encoding: * Accept-Encoding: compress;q=0.5, gzip;q=1.0 Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0
Accept-Language
Accept Language請求頭欄位類似於Accept,但限制了作爲請求響應首選的自然語言集。一般語法爲:
Accept-Language: language [q=qvalue]
多個語言可以用逗號分隔,可選的qvalue表示非首選語言的可接受質量級別,範圍爲0到1。下面是一個例子:
Accept-Language: da, en-gb;q=0.8, en;q=0.7
Authorization
Authorizationrequest header欄位值由包含所請求資源領域的用戶代理的身份驗證信息的憑據組成。一般語法爲:
Authorization : credentials
HTTP/1.0規範定義了基本授權方案,其中授權參數是以64爲基數編碼的用戶名:密碼字符串。下面是一個例子:
Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=
解碼爲的值是guest:guest123,其中guest是用戶ID,guest123是密碼。
Cookie
Cookie請求頭欄位值包含爲該URL存儲的名稱/值信息對。以下是通用語法:
Cookie: name=value
多個cookie可以用分號分隔,如下所示:
Cookie: name1=value1;name2=value2;name3=value3
Expect
Expect請求頭欄位用於指示客戶機需要一組特定的伺服器行爲。一般語法爲:
Expect : 100-continue | expectation-extension
如果伺服器接收到包含預期欄位的請求,該欄位包含它不支持的預期擴展,則它必須以417(預期失敗)狀態響應。
From
From請求頭欄位包含控制請求用戶代理的用戶的Internet電子郵件地址。下面是一個簡單的例子:
From: webmaster@w3.org
此頭欄位可用於日誌記錄,並用作識別無效或不需要的請求源的方法。
Host
主機請求頭欄位用於指定所請求資源的Internet主機和埠號。一般語法爲:
Host : "Host" ":" host [ ":" port ] ;
A沒有任何後續埠信息的主機表示默認埠,即80。例如,在源伺服器上請求http://www.w3.org/pub/www/將是:
GET /pub/WWW/ HTTP/1.1 Host: www.w3.org
If-Match
If Match請求頭欄位與使其成爲條件的方法一起使用。只有當此標記中的給定值與由ETag表示的給定實體標記匹配時,此頭才會請求伺服器執行請求的方法。一般語法爲:
If-Match : entity-tag
星號(*)與任何實體匹配,並且僅當該實體存在時,事務才繼續。以下是可能的示例:
If-Match: "xyzzy" If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" If-Match: *
如果沒有匹配的實體標記,或者如果給定「*」,並且當前實體不存在,則伺服器不得執行請求的方法,並且必須返回412(前提條件失敗)響應。
If-Modified-Since
If Modified Sincerequest header欄位與一個使其成爲條件的方法一起使用。如果請求的URL自該欄位中指定的時間以來未被修改,則不會從伺服器返回實體;相反,將返回304(未修改)響應,而不返回任何消息正文。if modified since的一般語法爲:
If-Modified-Since : HTTP-date
例如:
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
如果沒有匹配的實體標記,或者如果給定「*」,並且當前實體不存在,則伺服器不得執行請求的方法,並且必須返回412(前提條件失敗)響應。
If-None-Match
If None Match請求頭欄位與使其成爲條件的方法一起使用。只有此標記中的給定值之一與由ETag表示的給定實體標記匹配時,此頭才會請求伺服器執行所請求的方法。一般語法爲:
If-None-Match : entity-tag
星號(*)與任何實體匹配,並且僅當該實體不存在時,事務才繼續。以下是可能的示例:
If-None-Match: "xyzzy" If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz" If-None-Match: *
If-Range
If Rangerequest header欄位可與條件GET一起使用,僅請求缺少的實體部分(如果未更改),以及更改後的整個實體。一般語法如下:
If-Range : entity-tag | HTTP-date
可以使用實體標記或日期來標識已接收的部分實體。例如:
If-Range: Sat, 29 Oct 1994 19:43:31 GMT
在這裡,如果文檔自給定日期以來未被修改,伺服器將返回範圍頭給定的字節範圍,否則將返回所有新文檔。
If-Unmodified-Since
If Unmodified Sincerequest header欄位與一個使其成爲條件的方法一起使用。一般語法爲:
If-Unmodified-Since : HTTP-date
如果請求的資源自該欄位中指定的時間以來未被修改,則伺服器應執行請求的操作,如同If Unmodified since頭不存在一樣。例如:
If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
如果請求的結果不是2xx或412狀態,則應忽略If Unmodified Since頭。
Max-Forwards
Max Forwardsrequest header欄位提供了一種帶有TRACE和OPTIONS方法的機制,用於限制可以將請求轉發到下一個入站伺服器的代理或網關的數量。以下是通用語法:
Max-Forwards : n
最大轉發值是一個十進位整數,表示此請求消息可以轉發的剩餘次數。這對於使用跟蹤方法進行調試非常有用,避免了無限循環。例如:
Max-Forwards : 5
對於HTTP規範中定義的所有其他方法,可以忽略Max Forwards header欄位。
Proxy-Authorization
Proxy Authorizationrequest header欄位允許客戶端向需要身份驗證的代理標識自己(或其用戶)。以下是通用語法:
Proxy-Authorization : credentials
Proxy Authorization欄位值由包含所請求資源的代理和/或領域的用戶代理的身份驗證信息的憑據組成。
Range
Range請求頭欄位指定從文檔請求的內容的部分範圍。一般語法爲:
Range: bytes-unit=first-byte-pos "-" [last-byte-pos]
字節範圍規範中的第一個字節pos值給出範圍中第一個字節的字節偏移量。最後一個字節pos值給出範圍內最後一個字節的字節偏移量;也就是說,指定的字節位置是包含的。可以將字節單位指定爲字節。字節偏移量從零開始。一些簡單的例子如下:
- The first 500 bytes Range: bytes=0-499 - The second 500 bytes Range: bytes=500-999 - The final 500 bytes Range: bytes=-500 - The first and last bytes only Range: bytes=0-0,-1
可以列出多個範圍,用逗號分隔。如果逗號分隔字節範圍中的第一個數字丟失,則假定該範圍從文檔結尾開始計算。如果缺少第二個數字,則範圍是從n字節到文檔末尾。
Referer
Referer請求頭欄位允許客戶機指定從中請求URL的資源的地址(URI)。一般語法如下:
Referer : absoluteURI | relativeURI
下面是一個簡單的例子:
Referer: http://www.tutorialspoint.org/http/index.htm
如果欄位值是相對URI,則應相對於請求URI對其進行解釋。
TE
TE請求頭欄位指示它在響應中願意接受的擴展名傳輸編碼以及它是否願意接受分塊傳輸編碼中的尾部欄位。以下是通用語法:
TE : t-codings
關鍵字「trailures」的出現表示客戶端願意接受分塊傳輸編碼中的trailer欄位,並通過以下任一方式指定:
TE: deflate TE: TE: trailers, deflate;q=0.5
如果TE欄位值爲空或沒有TE欄位,則只有傳輸編碼被分塊。沒有傳輸編碼的消息總是可以接受的。
User-Agent
用戶代理請求頭欄位包含有關發起請求的用戶代理的信息。以下是通用語法:
User-Agent : product | comment
例子:
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Server Response Headers
Accept-Ranges
Accept Rangesresponse header欄位允許伺服器指示其接受資源的範圍請求。一般語法爲:
Accept-Ranges : range-unit | none
例如,接受字節範圍請求的伺服器可以發送:
Accept-Ranges: bytes
不接受任何類型的資源範圍請求的伺服器可能會發送:
Accept-Ranges: none
這將建議客戶端不要嘗試範圍請求。
Age
Ageresponse header欄位表示發件人對自響應(或其重新驗證)在源伺服器上生成以來的時間量的估計。一般語法爲:
Age : delta-seconds
Age values are non-negative decimal integers, representing time in seconds. 下面是一個簡單的例子:
Age: 1030
包含緩存的HTTP/1.1伺服器必須在從其自身緩存生成的每個響應中包含Age header欄位。
ETag
ETagresponse header欄位爲請求的變量提供實體標記的當前值。一般語法爲:
ETag : entity-tag
下面是一些簡單的例子:
ETag: "xyzzy" ETag: W/"xyzzy" ETag: ""
Location
Locationresponse header欄位用於將收件人重定向到請求URI以外的位置以完成。一般語法爲:
Location : absoluteURI
下面是一個簡單的例子:
Location: http://www.tutorialspoint.org/http/index.htm
內容位置頭欄位不同於位置,因爲內容位置標識了請求中包含的實體的原始位置。
Proxy-Authenticate
Proxy Authenticate響應頭欄位必須作爲407(需要代理身份驗證)響應的一部分包含。一般語法爲:
Proxy-Authenticate : challenge
Retry-After
Retry Afterresponse header欄位可與503(Service Unavailable)響應一起使用,以指示請求客戶端預期服務不可用的時間。一般語法爲:
Retry-After : HTTP-date | delta-seconds
示例:
Retry-After: Fri, 31 Dec 1999 23:59:59 GMT Retry-After: 120
在後一個示例中,延遲爲2分鐘。
Server
伺服器響應頭欄位包含有關源伺服器用於處理請求的軟體的信息。一般語法爲:
Server : product | comment
下面是一個簡單的例子:
Server: Apache/2.2.14 (Win32)
如果響應是通過代理轉發的,則代理應用程式不得修改伺服器響應頭。
Set-Cookie
設置Cookie響應頭欄位包含要爲此URL保留的名稱/值信息對。一般語法爲:
Set-Cookie: NAME=VALUE; OPTIONS
Set Cookie response header包含令牌Set Cookie,後跟一個或多個Cookie的逗號分隔列表。以下是可以指定爲選項的可能值:
S.N. | Options and Description |
---|---|
1 | Comment=comment 此選項可用於指定與cookie關聯的任何注釋。 |
2 | Domain=domain Domain屬性指定cookie有效的域。 |
3 | Expires=Date-time cookie將過期的日期。如果爲空,則當訪問者退出瀏覽器時,cookie將過期。 |
4 | Path=path Path屬性指定應用此cookie的url的子集。 |
5 | Secure 它指示用戶代理僅在安全連接下返回cookie。 |
以下是伺服器生成的簡單cookie頭的示例:
Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
Vary
Varyresponse header欄位指定實體具有多個源,因此可以根據指定的請求頭列表而變化。以下是通用語法:
Vary : field-name
You can specify multiple headers separated by commas and a value of asterisk "*" signals that unspecified parameters are not limited to the request-headers. 下面是一個簡單的例子:
Vary: Accept-Language, Accept-Encoding
這裡的欄位名不區分大小寫。
WWW-Authenticate
WWW Authenticate響應頭欄位必須包含在401(未授權)響應消息中。欄位值至少包含一個質詢,該質詢指示適用於請求URI的身份驗證方案和參數。一般語法爲:
WWW-Authenticate : challenge
WWW- Authenticate field value might contain more than one challenge, or if more than one WWW-Authenticate header field is provided, the contents of a challenge itself can contain a comma-separated list of authentication parameters. 下面是一個簡單的例子:
WWW-Authenticate: BASIC realm="Admin"
Entity Headers
Allow
Allow實體頭欄位列出由請求URI標識的資源支持的方法集。一般語法爲:
Allow : Method
You can specify multiple methods separated by commas. 下面是一個簡單的例子:
Allow: GET, HEAD, PUT
此欄位不能阻止客戶端嘗試其他方法。
Content-Encoding
內容編碼實體標題欄位用作媒體類型的修飾符。一般語法爲:
Content-Encoding : content-coding
The content-coding is a characteristic of the entity identified by the Request-URI. 下面是一個簡單的例子:
Content-Encoding: gzip
如果源伺服器不接受請求消息中實體的內容編碼,則伺服器應使用狀態代碼415(不支持的媒體類型)響應。
Content-Language
內容語言實體標題欄位描述了所附實體的預期訪問羣體的自然語言。以下是通用語法:
Content-Language : language-tag
Multiple languages may be listed for content that is intended for multiple audiences. 下面是一個簡單的例子:
Content-Language: mi, en
內容語言的主要目的是允許用戶根據自己的首選語言識別和區分實體。
內容長度
The 內容長度 entity-header field indicates the size of the entity-body, in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD method, the size of the entity-body that would have been sent, had the request been a GET. The general syntax is:
內容長度 : DIGITS
下面是一個簡單的例子:
內容長度: 3495
Any 內容長度 greater than or equal to zero is a valid value.
Content-Location
當可以從獨立於請求的資源的URI的位置訪問實體時,可以使用Content Locationentity header欄位爲消息中包含的實體提供資源位置。一般語法爲:
Content-Location: absoluteURI | relativeURI
下面是一個簡單的例子:
Content-Location: http://www.tutorialspoint.org/http/index.htm
Content Location的值還定義了實體的基本URI。
Content-MD5
Content-MD5實體頭欄位可用於提供實體的MD5摘要以檢查完整性
Content-MD5 : md5-digest using base64 of 128 bit MD5 digest as per RFC 1864
下面是一個簡單的例子:
Content-MD5 : 8c2d46911f3f5a326455f0ed7a8ed3b3
MD5摘要基於實體體的內容計算,包括已應用的任何內容編碼,但不包括應用於消息體的任何傳輸編碼。
Content-Range
Content Rangeentity header欄位與部分實體體一起發送,以指定部分實體體在整個實體體中的應用位置。一般語法爲:
Content-Range : bytes-unit SP first-byte-pos "-" last-byte-pos
字節內容範圍規範值的示例,假設實體總共包含1234個字節:
- The first 500 bytes: Content-Range : bytes 0-499/1234 - The second 500 bytes: Content-Range : bytes 500-999/1234 - All except for the first 500 bytes: Content-Range : bytes 500-1233/1234 - The last 500 bytes: Content-Range : bytes 734-1233/1234
When an HTTP message includes the content of a single range, this content is transmitted with a Content-Range header, and a 內容長度 header showing the number of bytes actually transferred. For example,
HTTP/1.1 206 Partial content Date: Wed, 15 Nov 1995 06:25:24 GMT Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT Content-Range: bytes 21010-47021/47022 內容長度: 26012 Content-Type: image/gif
Content-Type
Content Typeentity header欄位指示發送給收件人的實體體的媒體類型,或者在HEAD方法的情況下,指示如果請求是GET,則本應發送的媒體類型。一般語法爲:
Content-Type : media-type
下面是一個例子:
Content-Type: text/html; charset=ISO-8859-4
Expires
Expiresentity header欄位給出了將響應視爲過時的日期/時間。一般語法爲:
Expires : HTTP-date
下面是一個例子:
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified
Last Modifiedentity header欄位指示源伺服器認爲變體上次修改的日期和時間。一般語法爲:
Last-Modified: HTTP-date
下面是一個例子: