安全測試 - HTTP 頭欄位



HTTP 頭欄位

HTTP 頭欄位提供關於請求或響應,或關於訊息體中傳送的物件所需的資訊。HTTP 訊息頭有四種類型:

  • 通用報頭 - 這些報頭欄位對請求和響應訊息都具有普遍適用性。

  • 客戶端請求報頭 - 這些報頭欄位僅適用於請求訊息。

  • 伺服器響應報頭 - 這些報頭欄位僅適用於響應訊息。

  • 實體報頭 - 這些報頭欄位定義關於實體體或(如果不存在實體體)的元資訊。

通用報頭

現在讓我們詳細瞭解一下通用報頭。

Cache-control

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 = 秒

指示客戶端願意接受年齡不超過指定秒數的響應。

4

max-stale [ = 秒 ]

指示客戶端願意接受已超過其過期時間的響應。如果給出秒數,則其過期時間不能超過該時間。

5

min-fresh = 秒

指示客戶端願意接受新鮮度生命週期不小於其當前年齡加上指定秒數的響應。

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 = 秒

指示客戶端願意接受年齡不超過指定秒數的響應。

9

s-maxage = 秒

此指令指定的最大年齡將覆蓋 max-age 指令或 Expires 報頭指定的最大年齡。私有快取始終忽略 s-maxage 指令。

Connection

Connection 通用報頭欄位允許傳送方指定對該特定連線所需的選項,並且不得透過代理在進一步的連線中進行通訊。以下是使用連線報頭的簡單語法:

Connection : "Connection"

HTTP/1.1 為傳送方定義了“close”連線選項,以指示在響應完成之後連線將被關閉。例如:

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 通用報頭欄位用於包含可能適用於請求/響應鏈中任何接收方的實現特定指令。例如:

Pragma: no-cache

HTTP/1.0 中定義的唯一指令是 no-cache 指令,並在 HTTP 1.1 中為了向後相容而保留。將來不會定義新的 Pragma 指令。

Trailer

Trailer 通用欄位值指示給定的一組報頭欄位存在於使用分塊傳輸編碼編碼的訊息的尾部。以下是使用 Trailer 報頭欄位的簡單語法:

Trailer : field-name

Trailer 報頭欄位中列出的訊息報頭欄位不得包含以下報頭欄位:

  • Transfer-Encoding
  • Content-Length
  • Trailer

Transfer-Encoding

Transfer-Encoding 通用報頭欄位指示為了安全地在傳送方和接收方之間傳輸,已對訊息體應用了哪種型別的轉換。這與內容編碼不同,因為傳輸編碼是訊息的屬性,而不是實體體的屬性。以下語法顯示了使用 Transfer-Encoding 報頭欄位:

Transfer-Encoding: chunked

所有傳輸編碼值都區分大小寫。

Upgrade

Upgrade 通用報頭允許客戶端指定其支援的附加通訊協議,如果伺服器認為切換協議合適,則希望使用這些協議。例如:

Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

Upgrade 報頭欄位旨在為從 HTTP/1.1 到其他不相容協議的過渡提供一種簡單的機制。

Via

閘道器和代理必須使用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 通用報頭用於承載有關訊息狀態或轉換的其他資訊,這些資訊可能不會反映在訊息中。響應可能承載多個 Warning 報頭。

Warning : warn-code SP warn-agent SP warn-text SP warn-date

客戶端請求報頭

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

這將被解釋為text/htmltext/x-c是首選媒體型別,但如果它們不存在,則傳送text/x-dvi實體,如果該實體也不存在,則傳送text/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-Charset欄位中存在特殊值“*”,則匹配每個字元集,如果不存在Accept-Charset報頭,則預設為任何字元集都是可接受的。

Accept-Encoding

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-Language 請求報頭欄位類似於 Accept,但限制了作為對請求的響應而首選的自然語言集。以下是通用語法:

Accept-Language: language [q = qvalue]

多個語言可以用逗號分隔列出,可選的 qvalue 表示非首選語言的可接受質量級別,範圍從 0 到 1。以下是一個示例:

Accept-Language: da, en-gb;q = 0.8, en;q = 0.7

Authorization

Authorization 請求報頭欄位值包含包含使用者代理對請求資源的領域的認證資訊的憑據。以下是通用語法:

Authorization : credentials

HTTP/1.0 規範定義了 BASIC 授權方案,其中授權引數是使用 base 64 編碼的username:password字串。以下是一個示例:

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

如果伺服器收到包含 Expect 欄位的請求,並且該欄位包含其不支援的預期擴充套件,則必須以 417(預期失敗)狀態進行響應。

From

From 請求報頭欄位包含控制請求使用者代理的人類使用者的 Internet 電子郵件地址。以下是一個簡單的示例:

From: webmaster@w3.org

此報頭欄位可用於日誌記錄目的,以及作為識別無效或不需要的請求來源的一種方法。

Host

Host 請求頭欄位用於指定要請求的資源的網際網路主機和埠號。以下是通用語法:

Host : "Host" ":" host [ ":" port ] ;

主機如果沒有尾隨埠資訊,則表示預設埠,即 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-Since 請求頭欄位用於使方法成為條件方法。如果請求的 URL 自此欄位中指定的時間以來未被修改,則伺服器將不會返回實體;而是將返回 304(未修改)響應,且不帶任何訊息正文。以下是通用語法:

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-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 請求頭欄位用於使方法成為條件方法。以下是通用語法:

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-Forwards 請求頭欄位提供了一種機制,可以使用 TRACE 和 OPTIONS 方法來限制可以將請求轉發到下一個入站伺服器的代理或閘道器的數量。以下是通用語法:

Max-Forwards : n

Max-Forwards 值是一個十進位制整數,指示此請求訊息可以被轉發剩餘的次數。這對於使用 TRACE 方法進行除錯、避免無限迴圈很有用。例如:

Max-Forwards : 5

對於 HTTP 規範中定義的所有其他方法,都可以忽略 Max-Forwards 標頭欄位。

Proxy-Authorization

Proxy-Authorization 請求頭欄位允許客戶端向需要身份驗證的代理標識自身(或其使用者)。以下是通用語法:

Proxy-Authorization : credentials

Proxy-Authorization 欄位值包含憑據,其中包含使用者代理針對代理和/或正在請求的資源的域的身份驗證資訊。

Range

Range 請求頭欄位指定從文件請求的內容的部分範圍。以下是通用語法:

Range: bytes-unit = first-byte-pos "-" [last-byte-pos]

位元組範圍規範中的 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

Referer 請求頭欄位允許客戶端指定已請求 URL 的資源的地址 (URI)。以下是通用語法:

Referer : absoluteURI | relativeURI

以下是一個簡單的示例:

Referer: http://www.tutorialspoint.org/http/index.htm

如果欄位值是相對 URI,則應將其解釋為相對於Request-URI

TE

TE 請求頭欄位指示它願意在響應中接受什麼擴充套件傳輸編碼以及它是否願意在分塊傳輸編碼中接受尾部欄位。以下是通用語法:

TE: t-codings

"trailers" 關鍵字的存在表明客戶端願意在分塊傳輸編碼中接受尾部欄位,並且以以下兩種方式之一指定:

TE: deflate
TE:
TE: trailers, deflate;q = 0.5

如果 TE 欄位值為空或不存在 TE 欄位,則唯一的傳輸編碼為分塊。始終可以接受沒有傳輸編碼的訊息。

User-Agent

User-Agent 請求頭欄位包含有關發起請求的使用者代理的資訊。以下是通用語法:

User-Agent : product | comment

示例

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

伺服器響應頭

它們是給定的:

Accept-Ranges

Accept-Ranges 響應頭欄位允許伺服器指示其對資源的範圍請求的接受情況。以下是通用語法:

Accept-Ranges  : range-unit | none

例如,接受位元組範圍請求的伺服器可能會發送

Accept-Ranges: bytes

不接受任何型別的資源範圍請求的伺服器可能會發送:

Accept-Ranges: none

這將建議客戶端不要嘗試範圍請求。

Age

Age 響應頭欄位傳達傳送方對自響應(或其重新驗證)在源伺服器生成以來經過時間的估計。以下是通用語法:

Age : delta-seconds

Age 值是非負十進位制整數,以秒為單位表示時間。以下是一個簡單的示例:

Age: 1030

包含快取的 HTTP/1.1 伺服器必須在其從自身快取生成的每個響應中包含 Age 標頭欄位。

ETag

ETag 響應頭欄位提供請求變體的實體標籤的當前值。以下是通用語法:

ETag :  entity-tag

以下是一些簡單的示例:

ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""

Location

Location 響應頭欄位用於將接收者重定向到請求 URI 以外的位置以完成操作。以下是通用語法:

Location : absoluteURI

以下是一個簡單的示例:

Location: http://www.tutorialspoint.org/http/index.htm

Content-Location 標頭欄位與 Location 不同,因為 Content-Location 標識請求中包含的實體的原始位置。

Proxy-Authenticate

Proxy-Authenticate 響應頭欄位必須作為 407(需要代理身份驗證)響應的一部分包含在內。以下是通用語法:

Proxy-Authenticate  : challenge

Retry-After

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 響應頭欄位包含有關源伺服器用於處理請求的軟體的資訊。以下是通用語法:

Server : product | comment

以下是一個簡單的示例:

Server: Apache/2.2.14 (Win32)

如果響應正在透過代理轉發,則代理應用程式不得修改 Server 響應標頭。

Set-Cookie

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 響應頭欄位指定實體具有多個來源,因此可能根據請求標頭列表變化。以下是通用語法:

Vary : field-name

您可以使用逗號分隔多個標頭,並且星號 "*" 的值表示未指定的引數不僅限於請求標頭。以下是一個簡單的示例:

Vary: Accept-Language, Accept-Encoding

此處,欄位名稱不區分大小寫。

WWW-Authenticate

WWW-Authenticate 響應頭欄位必須包含在 401(未授權)響應訊息中。欄位值包含至少一個挑戰,該挑戰指示適用於 Request-URI 的身份驗證方案和引數。以下是通用語法:

WWW-Authenticate : challenge

WWW- Authenticate 欄位值,因為它可能包含多個挑戰,或者如果提供了多個 WWW-Authenticate 標頭欄位,則挑戰本身的內容可以包含逗號分隔的身份驗證引數列表。以下是一個簡單的示例:

WWW-Authenticate: BASIC realm = "Admin"

實體頭

Allow

Allow 實體頭欄位列出 Request-URI 標識的資源支援的一組方法。以下是通用語法:

Allow : Method

您可以使用逗號分隔多個方法。以下是一個簡單的示例:

Allow: GET, HEAD, PUT

此欄位無法阻止客戶端嘗試其他方法。

Content-Encoding

Content-Encoding 實體頭欄位用作媒體型別的修飾符。以下是通用語法:

Content-Encoding : content-coding

內容編碼是 Request-URI 標識的實體的特徵。以下是一個簡單的示例:

Content-Encoding: gzip

如果請求訊息中實體的內容編碼對於源伺服器不可接受,則伺服器應以 415(不支援的媒體型別)狀態程式碼進行響應。

Content-Language

Content-Language 實體頭欄位描述封閉實體的目標受眾的自然語言。以下是通用語法:

Content-Language : language-tag

可以為針對多個受眾的內容列出多種語言。以下是一個簡單的示例:

Content-Language: mi, en

Content-Language 的主要目的是允許使用者根據自己的首選語言識別和區分實體。

Content-Length

Content-Length 實體頭欄位指示傳送到接收方的實體主體的大小(以十進位制 OCTET 數表示),或者在 HEAD 方法的情況下,指示如果請求為 GET,則傳送的實體主體的大小。以下是通用語法:

Content-Length : DIGITS

以下是一個簡單的示例:

Content-Length: 3495

任何大於或等於零的 Content-Length 都是有效值。

Content-Location

Content-Location 實體頭欄位可用於在訊息中包含的實體可從請求資源的 URI 分開的某個位置訪問時,提供該實體的資源位置。以下是通用語法:

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-Range 實體頭欄位與部分實體主體一起傳送,以指定應在完整實體主體的何處應用部分主體。以下是通用語法:

Content-Range : bytes-unit SP first-byte-pos "-" last-byte-pos

假設實體包含總共 1234 個位元組,以下是 byte-content-range-spec 值的示例:

- 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

當 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

Content-Type 實體頭欄位指示傳送到接收方的實體主體媒體型別,或者在 HEAD 方法的情況下,指示如果請求為 GET,則傳送的媒體型別。以下是通用語法:

Content-Type : media-type

以下是一個示例:

Content-Type: text/html; charset = ISO-8859-4

Expires

Expires 實體頭欄位給出響應被視為陳舊的日期/時間。以下是通用語法:

Expires : HTTP-date

以下是一個示例:

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified

Last-Modified 實體頭欄位指示源伺服器認為變體最後修改的日期和時間。以下是通用語法:

Last-Modified: HTTP-date

以下是一個示例:

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
http_protocol_basics.htm
廣告