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

浏览器兼容性

另见