Accept-Encoding 標頭

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

* 此特性的某些部分可能存在不同級別的支援。

HTTP Accept-Encoding 請求響應標頭指示傳送方能夠理解的內容編碼(通常是壓縮演算法)。在請求中,伺服器透過內容協商從客戶端的編碼建議中選擇一個,並透過Content-Encoding響應標頭告知客戶端其選擇。在響應中,它提供伺服器能夠理解的針對請求資源的訊息中哪些內容編碼的資訊,以便在後續對該資源的請求中使用該編碼。例如,如果對資源的請求(例如 PUT)使用了不支援的編碼,則在 415 Unsupported Media Type 響應中會包含 Accept-Encoding

即使客戶端和伺服器都支援相同的壓縮演算法,如果 identity 值也符合要求,伺服器仍可能選擇不壓縮響應體。這在兩種常見情況下發生:

  1. 資料已經壓縮,這意味著第二次壓縮不會減少傳輸資料的大小,在某些情況下甚至可能增加內容的大小。預壓縮的影像格式(例如 JPEG)就是這種情況。
  2. 伺服器過載,無法分配計算資源執行壓縮。例如,Microsoft 建議如果伺服器使用超過 80% 的計算能力,則不要進行壓縮。

只要 identity;q=0*;q=0 指令沒有明確禁止表示無編碼的 identity 值,伺服器就絕不能返回 406 Not Acceptable 錯誤。

注意:IANA 維護官方內容編碼列表bzipbzip2 編碼是非標準的,但在某些情況下可能會使用,特別是為了相容舊系統。

頭型別 請求標頭, 響應標頭
禁止請求頭

語法

http
Accept-Encoding: gzip
Accept-Encoding: compress
Accept-Encoding: deflate
Accept-Encoding: br
Accept-Encoding: zstd
Accept-Encoding: dcb
Accept-Encoding: dcz
Accept-Encoding: identity
Accept-Encoding: *

// Multiple algorithms, weighted with the quality value syntax:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5

指令

gzip

一種使用帶 32 位 CRC 的 Lempel-Ziv 編碼(LZ77)的壓縮格式。

壓縮(compress)

一種使用 Lempel-Ziv-Welch(LZW)演算法的壓縮格式。

解壓縮(deflate)

一種使用 zlib 結構和 deflate 壓縮演算法的壓縮格式。

br

一種使用 Brotli 演算法的壓縮格式。

zstd

一種使用 Zstandard 演算法的壓縮格式。

dcb 實驗性

一種使用 字典壓縮 Brotli 演算法的格式。參見 壓縮字典傳輸

dcz 實驗性

一種使用 字典壓縮 Zstandard 演算法的格式。參見 壓縮字典傳輸

identity

表示身份函式(即不修改或不壓縮)。即使省略此值,它也始終被認為是可接受的。

* (萬用字元)

匹配標頭中未列出的任何內容編碼。如果標頭不存在,這是預設值。此指令不表示支援任何演算法,而是表示未表達任何偏好。

;q=(q 值權重)

任何值都按照使用相對質量值(稱為*權重*)表示的偏好順序排列。

示例

預設 Accept-Encoding 值

瀏覽器導航通常具有以下 Accept-Encoding 請求標頭值:

http
GET /en-US/ HTTP/2
Host: developer.mozilla.org
Accept-Encoding: gzip, deflate, br, zstd

加權 Accept-Encoding 值

以下標頭顯示了使用介於 0(最低優先順序)和 1(最高優先順序)之間的質量值表示的 Accept-Encoding 偏好。Brotli 壓縮的權重為 1.0,使 br 成為客戶端的首選,其次是 gzip,優先順序為 0.8,然後是任何其他內容編碼,優先順序為 0.1

http
Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1

規範

規範
HTTP 語義
# field.accept-encoding
Zstandard 壓縮和 'application/zstd' 媒體型別
# name-content-encoding

瀏覽器相容性

另見