HTTP檔頭欄位提供有關請求或響應的所需資訊,或有關在訊息正文中傳送的物件的資訊。HTTP訊息頭有四種型別 -
下面讓我們詳細介紹通用檔頭。
Cache-Control
欄位用於指定所有快取系統必須遵守的指令。語法如下 -
Cache-Control : cache-request-directive|cache-response-directive
HTTP用戶端或伺服器可以使用Cache-control
通用檔頭來指定快取的引數或從快取中請求某些型別的文件。快取指令在逗號分隔列表中指定。例如 -
Cache-control: no-cache
用戶端在HTTP請求中可以使用以下重要的快取請求指令 -
編號 | 指令 | 描述 |
---|---|---|
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響應中可以使用以下快取響應指令 -
編號 | 快取請求指令 | 描述 |
---|---|---|
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 : "Connection"
HTTP/1.1
定義了「關閉」連線選項,傳送方在完成響應後發出連線將被關閉的信號。例如 -
Connection: close
預設情況下,HTTP 1.1使用持久連線,其中連線在事務後不會自動關閉。另一方面,HTTP 1.0
預設情況下沒有持久連線。如果1.0用戶端希望使用持久連線,則它使用keep-alive
引數,如下所示 -
Connection: keep-alive
所有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: no-cache
HTTP/1.0
中定義的唯一指令是no-cache
指令,並在HTTP/1.1中維護以實現向後相容。將來不會定義新的Pragma
指令。
Trailer
欄位值指示給定的檔頭欄位集存在於用分塊傳輸編碼編碼的訊息的尾部中。以下是使用Trailer
檔頭欄位的簡單語法 -
Trailer : field-name
Trailer
檔頭欄位中列出的訊息檔頭欄位不得包含以下檔頭欄位 -
Transfer-Encoding
Content-Length
Trailer
Transfer-Encoding
檔頭欄位指示已對訊息正文應用了哪種型別的轉換,以便在發件人和收件人之間安全地進行轉換。這與內容編碼不同,因為傳輸編碼是訊息的屬性,而不是實體主體的屬性。以下語法顯示使用Transfer-Encoding
檔頭欄位 -
Transfer-Encoding: chunked
所有傳輸編碼值都不區分大小寫。
Upgrade
檔頭允許用戶端指定它支援的其他通訊協定,並且如果伺服器發現它適合切換協定,則希望使用它們。例如 -
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Upgrade
頭欄位旨在提供一種從HTTP/1.1
轉換到其他不相容協定的簡單機制。
閘道器和代理必須使用Via通用檔頭來指示中間協定和接收方。例如,可以將請求訊息從HTTP/1.0
使用者代理傳送到代號為fred
的內部代理,該代理使用HTTP/1.1
將請求轉發到nowhere.com
上的公共代理,該代理完成請求 通過https://www.ics.uci.edu/
將其轉發到源伺服器。www.ics.uci.edu
收到的請求將具有以下Via
頭欄位 -
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Upgrade
檔頭欄位旨在提供一種從HTTP/1.1
轉換到其他不相容協定的簡單機制
Warning
通用檔頭用於攜帶有關訊息狀態或轉換的其他資訊,這些資訊可能不會反映在訊息中。響應可能帶有多個警告檔頭。
Warning : warn-code SP warn-agent SP warn-text SP warn-date
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
這將被解釋為text/html
和text/x-c
是首選媒體型別,但如果它們不存在,則傳送text/x-dvi
實體,如果不存在,則傳送text/plain
實體。
Accept-Charset
請求檔頭欄位可用於指示響應可接受的字元集。以下是一般語法 -
Accept-Charset: character_set [q = qvalue]
可以用逗號分隔多個字元集,可選的qvalue
表示非優先字元集的可接受品質級別,範圍為0
到1
。以下是一個範例 -
Accept-Charset: iso-8859-5, unicode-1-1; q = 0.8
特殊值*
(如果存在於Accept-Charset
欄位中)與每個字元集匹配,如果不存在Accept-Charset
檔頭,則預設值為任何字元集都可接受。
Accept-Encoding
請求檔頭欄位類似於Accept
,但限制響應中可接受的內容編碼。以下是一般語法 -
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
類似,但限制首選的自然語言集作為對請求的響應。以下是一般語法 -
Accept-Language: language [q = qvalue]
可以用逗號分隔多種語言,可選的qvalue
表示非優選語言的可接受品質級別,範圍為0
到1
。以下是一個範例 -
Accept-Language: da, en-gb;q = 0.8, en;q = 0.7
Authorization
請求檔頭欄位值包含包含所請求資源領域的使用者代理的認證資訊的憑證。以下是一般語法 -
Authorization : credentials
HTTP/1.0
規範定義了BASIC授權方案,其中授權引數是username:password
以base 64編碼的字串。以下是一個範例 -
Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM =
值解析為guest:guest123
,其中guest
是使用者ID,guest123
是密碼。
Cookie
請求檔頭欄位值包含為該URL儲存的名稱/值對資訊。以下是一般語法 -
Cookie: name = value
可以用分號分隔多個cookie
,如下所示 -
Cookie: name1 = value1;name2 = value2;name3 = value3
Expect
請求檔頭欄位用於指示用戶端需要特定的伺服器行為。以下是一般語法 -
Expect : 100-continue | expectation-extension
如果伺服器收到包含Expect
欄位的請求,該欄位包含它不支援的期望擴充套件,則它必須以417(期望失敗)狀態響應。
From
請求檔頭欄位包含控制請求使用者代理的人類使用者的Internet電子郵件地址。以下是一個簡單的例子 -
From: [email protected]
From
請求檔頭欄位可以用於記錄目的,並且可以用作識別無效或不需要的請求的源的手段。
Host
請求檔頭欄位用於指定所請求資源的Internet主機和埠號。以下是一般語法 -
Host : "Host" ":" host [ ":" port ] ;
沒有任何尾隨埠資訊的主機則使用預設埠,即80
。例如,原始伺服器上http://www.w3.org/pub/WWW/
的請求將是 -
GET /pub/WWW/ HTTP/1.1
Host: www.w3.org
If-Match
請求檔頭欄位與方法一起使用以使其成為條件。僅當此標記中的給定值與ETag
表示的給定實體標記匹配時,此檔頭才請求伺服器執行所請求的方法。以下是一般語法 -
If-Match : entity-tag
星號(*
)匹配任何實體,僅當實體存在時,事務才會繼續。以下是可能的例子 -
If-Match: "xyzzy"
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-Match: *
如果沒有實體標籤匹配,或者如果給出*
並且不存在當前實體,則伺服器不能執行所請求的方法,並且必須返回412(Precondition Failed)響應。
If-Modified-Since
請求檔頭欄位與方法一起使用以使其成為條件。如果自該欄位中指定的時間以來未請求修改請求的URL,則不會從伺服器返回實體; 相反,將返回304(未修改)響應,而不返回任何訊息體。以下是一般語法 -
If-Modified-Since : HTTP-date
另一個範例如下 -
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
如果沒有實體標籤匹配,或者如果給出*
並且不存在當前實體,則伺服器不能執行所請求的方法,並且必須返回412(Precondition Failed)響應。
If-None-Match
請求檔頭欄位與方法一起使用以使其成為條件。僅當此標記中的給定值之一與ETag
表示的給定實體標記匹配時,此檔頭才請求伺服器執行所請求的方法。以下是一般語法 -
If-None-Match : entity-tag
星號(*
)匹配任何實體,僅當實體不存在時,事務才會繼續。以下是可能的例子 -
If-None-Match: "xyzzy"
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-None-Match: *
If-Range
請求檔頭欄位可以與條件GET一起使用,以僅請求缺少的實體部分(如果尚未更改),以及整個實體(如果已更改)。以下是一般語法 -
If-Range : entity-tag | HTTP-date
可以使用實體標籤或日期來標識已經接收的部分實體。例如 -
If-Range: Sat, 29 Oct 1994 19:43:31 GMT
這裡,如果文件自給定日期以來未被修改,則伺服器返回Range
頭部給出的位元組範圍,否則返回所有新文件。
If-Unmodified-Since
請求檔頭欄位與方法一起使用以使其成為條件。以下是一般語法 -
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
請求檔頭欄位提供了一種使用TRACE
和OPTIONS
方法的機制,以限制可以將請求轉發到下一個入站伺服器的代理或閘道器的數量。以下是一般語法 -
Max-Forwards : n
Max-Forwards
值是十進位制整數,表示可以轉發此請求訊息的剩餘次數。這對於使用TRACE
方法進行偵錯非常有用,可以避免無限迴圈。例如 -
Max-Forwards : 5
對於HTTP規範中定義的所有其他方法,可以忽略Max-Forwards
頭欄位。
Proxy-Authorization
請求檔頭欄位允許用戶端將自己(或其使用者)標識到需要認證的代理。以下是一般語法 -
Proxy-Authorization : credentials
Proxy-Authorization
欄位值包含包含代理的使用者代理的身份驗證資訊和/或所請求資源的域的憑證。
Range
請求檔頭欄位指定從文件請求的內容的部分範圍。以下是一般語法 -
Range: bytes-unit = first-byte-pos "-" [last-byte-pos]
byte-range-spec
中的first-byte-pos
值給出了一個範圍內第一個位元組的位元組偏移量。last-byte-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
請求檔頭欄位允許用戶端指定從中請求URL的資源的地址(URI)。以下是一般語法 -
Referer : absoluteURI | relativeURI
以下是一個簡單的例子 -
Referer: http://www.yiibai.org/http/index.html
如果欄位值是相對URI,則應相對於Request-URI
進行解釋。
TE請求頭欄位指示它在響應中願意接受的擴充套件傳輸編碼以及它是否願意接受分塊傳輸編碼中的尾部欄位。以下是一般語法 -
TE: t-codings
關鍵字trailers
存在表明用戶端願意接受分塊傳輸編碼中的trailers
欄位,並指定其中一種方式 -
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)
Accept-Ranges
響應頭欄位允許伺服器指示其接受資源的範圍請求。以下是一般語法 -
Accept-Ranges : range-unit | none
例如,接受位元組範圍請求的伺服器可以傳送 -
Accept-Ranges: bytes
不接受任何資源範圍請求的伺服器可以傳送 -
Accept-Ranges: none
它將建議客戶不要嘗試範圍請求。
Age
響應頭欄位傳達傳送方對自原始伺服器生成響應(或其重新驗證)以來的時間量的估計。以下是一般語法 -
Age : delta-seconds
Age
值是非負十進位制整數,表示以秒為單位的時間。以下是一個簡單的例子 -
Age: 1030
包含快取的HTTP/1.1
伺服器必須在從其自己的快取生成的每個響應中包含Age
頭欄位。
ETag
響應檔頭欄位提供所請求變體的實體標籤的當前值。以下是一般語法 -
ETag : entity-tag
以下是簡單的例子 -
ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""
Location
響應檔頭欄位用於將收件人重定向到Request-URI
以外的位置以完成。以下是一般語法 -
Location : absoluteURI
以下是一個簡單的例子 -
Location: http://www.yiibai.org/http/index.html
Content-Location
頭欄位與Location
的不同之處在於Content-Location
標識請求中包含的實體的原始位置。
Proxy-Authenticate
響應頭欄位必須作為407(需要代理身份驗證)響應的一部分包含在內。以下是一般語法 -
Proxy-Authenticate : challenge
Retry-After
響應頭欄位可以與503(服務不可用)響應一起使用,以指示服務預期對請求用戶端不可用的時間。以下是一般語法 -
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)
如果通過代理轉發響應,則代理應用程式不得修改Server
響應檔頭。
Set-Cookie
響應頭欄位包含要為此URL保留的名稱/值對資訊。以下是一般語法 -
Set-Cookie: NAME = VALUE; OPTIONS
Set-Cookie
響應頭包括令牌Set-Cookie:,
後跟逗號分隔的一個或多個cookie
列表。以下是指定為選項的可能值 -
編號 | 選項 | 描述 |
---|---|---|
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
響應頭欄位指定實體具有多個源,因此可以根據指定的請求頭列表而變化。以下是一般語法 -
Vary : field-name
可以指定由逗號分隔的多個檔頭,並且值為星號*
表示未指定的引數不限於請求檔頭。以下是一個簡單的例子 -
Vary: Accept-Language, Accept-Encoding
WWW-Authenticate
響應頭欄位必須包含在401(未授權)響應訊息中。欄位值包括至少一個challenge
,該challenge
指示適用於Request-URI
的認證方案和引數。以下是一般語法 -
WWW-Authenticate: BASIC realm = "Admin"
Allow
實體檔頭欄位列出Request-URI
標識的資源支援的方法集。以下是一般語法 -
Allow : Method
可以指定以逗號分隔的多個方法。以下是一個簡單的例子 -
Allow: GET, HEAD, PUT
此欄位無法阻止用戶端嘗試其他方法。
Content-Encoding
實體檔頭欄位用作媒體型別的修飾符。以下是一般語法 -
Content-Encoding : content-coding
內容編碼是Request-URI
標識的實體的特徵。以下是一個簡單的例子 -
Content-Encoding: gzip
如果請求訊息中的實體的內容編碼對於源伺服器是不可接受的,則伺服器應該以狀態程式碼415(不支援的媒體型別)進行響應。
Content-Language
實體檔頭欄位描述了所包含實體的目標受眾的自然語言。以下是一般語法 -
Content-Language : language-tag
可以針對針對多個受眾的內容列出多種語言。以下是一個簡單的例子 -
Content-Language: mi, en
內容語言的主要目的是允許使用者根據使用者自己的首選語言識別和區分實體。
Content-Length
實體檔頭欄位指示實體主體的大小,以十進位制數量的OCTET
傳送給接收者,或者在HEAD方法的情況下,實體主體的大小已經傳送到GET請求。以下是一般語法 -
Content-Length : DIGITS
以下是一個簡單的例子 -
Content-Length: 3495
任何大於或等於零的Content-Length
都是有效值。
當該實體可從與所請求資源的URI分開的位置存取時,Content-Location
實體檔頭欄位可用於為訊息中包含的實體提供資源位置。以下是一般語法 -
Content-Location: absoluteURI | relativeURI
以下是一個簡單的範例 -
Content-Location: http://www.yiibai.org/http/index.html
Content-Location
的值還定義了實體的基URI。
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-Range : bytes-unit SP first-byte-pos "-" last-byte-pos
假設實體包含總共2233
個位元組的byte-content-range-spec
值的範例 -
- The first 500 bytes:
Content-Range : bytes 0-499/2233
- The second 500 bytes:
Content-Range : bytes 500-999/2233
- All except for the first 500 bytes:
Content-Range : bytes 500-1233/2233
- The last 500 bytes:
Content-Range : bytes 734-1233/2233
當HTTP訊息包括單個範圍的內容時,該內容與Content-Range
檔頭一起傳輸,Content-Length
檔頭顯示實際傳輸的位元組數。例如,
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
Content-Length: 26012
Content-Type: image/gif
Content-Type
實體檔頭欄位指示傳送給接收方的實體主體的媒體型別,或者在HEAD
方法的情況下,指示在請求是GET
時已經傳送的媒體型別。以下是一般語法 -
Content-Type : media-type
下面是一個簡單的範例 -
Content-Type: text/html; charset = ISO-8859-4
Expires
實體檔頭欄位給出了響應值被視為是過時的日期/時間。以下是一般語法 -
Expires : HTTP-date
下面是一個簡單的範例 -
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified
實體檔頭欄位指示源伺服器認為變體上次修改的日期和時間。以下是一般語法 -
Last-Modified: HTTP-date
以下是一個簡單的範例 -
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT