Accept-Encoding 标头
Baseline 广泛可用 *
HTTP Accept-Encoding
请求和响应标头指示发送方能够理解的内容编码(通常是压缩算法)。在请求中,服务器通过内容协商从客户端的编码建议中选择一个,并通过Content-Encoding
响应标头告知客户端其选择。在响应中,它提供服务器能够理解的针对请求资源的消息中哪些内容编码的信息,以便在后续对该资源的请求中使用该编码。例如,如果对资源的请求(例如 PUT
)使用了不支持的编码,则在 415 Unsupported Media Type
响应中会包含 Accept-Encoding
。
即使客户端和服务器都支持相同的压缩算法,如果 identity
值也符合要求,服务器仍可能选择不压缩响应体。这在两种常见情况下发生:
- 数据已经压缩,这意味着第二次压缩不会减少传输数据的大小,在某些情况下甚至可能增加内容的大小。预压缩的图像格式(例如 JPEG)就是这种情况。
- 服务器过载,无法分配计算资源执行压缩。例如,Microsoft 建议如果服务器使用超过 80% 的计算能力,则不要进行压缩。
只要 identity;q=0
或 *;q=0
指令没有明确禁止表示无编码的 identity
值,服务器就绝不能返回 406 Not Acceptable
错误。
注意:IANA 维护官方内容编码列表。bzip
和 bzip2
编码是非标准的,但在某些情况下可能会使用,特别是为了兼容旧系统。
语法
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)
br
-
一种使用 Brotli 算法的压缩格式。
zstd
-
一种使用 Zstandard 算法的压缩格式。
dcb
实验性-
一种使用 字典压缩 Brotli 算法的格式。参见 压缩字典传输。
dcz
实验性-
一种使用 字典压缩 Zstandard 算法的格式。参见 压缩字典传输。
identity
-
表示身份函数(即不修改或不压缩)。即使省略此值,它也始终被认为是可接受的。
*
(通配符)-
匹配标头中未列出的任何内容编码。如果标头不存在,这是默认值。此指令不表示支持任何算法,而是表示未表达任何偏好。
;q=
(q 值权重)-
任何值都按照使用相对质量值(称为*权重*)表示的偏好顺序排列。
示例
默认 Accept-Encoding 值
浏览器导航通常具有以下 Accept-Encoding
请求标头值:
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
。
Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
规范
规范 |
---|
HTTP 语义 # field.accept-encoding |
Zstandard 压缩和 'application/zstd' 媒体类型 # name-content-encoding |
浏览器兼容性
加载中…
另见
415 Unsupported Media Type
- HTTP 内容协商
- 包含内容协商结果的标头:
Content-Encoding
- 其他类似标头:
TE
、Accept
、Accept-Language
- Brotli 压缩
- GZip 压缩
- Zstandard 压缩
- 压缩字典传输指南