Accept-Encoding

Accept-Encoding 请求 HTTP 标头表示客户端能够理解的内容编码(通常是某种压缩算法)。服务器使用内容协商从中选择一个提议,并通过 Content-Encoding 响应标头告知客户端这一选择。

即使客户端和服务器都支持相同的压缩算法,在 identity 值可以被接受的情况下,服务器也可以选择不对响应体进行压缩。导致出现这种情况的常见原因有两个:

  • 要发送的数据已经经过压缩,再次压缩不会减少传输的数据量。这适用于预先压缩过的图像格式(如 JPEG)。
  • 服务器过载,无法分配计算资源来进行压缩。例如,微软建议如果服务器使用超过其计算能力的 80%,则不应进行压缩。

只要 identity;q=0*;q=0 指令不明确禁止表示无编码的 identity 值,服务器就绝对不应返回 406 Not Acceptable 错误。

备注:

  • IANA 维护了一个完整的官方支持的编码方式列表
  • 另外两种内容编码 bzipbzip2 有时也会被使用。这两种非标准编码实现了这两个 UNIX 程序所使用的算法。请注意,由于专利许可问题,bzip 已被弃用。
标头类型 请求标头
禁止修改的标头

语法

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

// 使用质量价值语法对多个算法进行加权:
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5

指令

gzip

一种使用 Lempel-Ziv 编码(LZ77)压缩算法,以及 32 位 CRC 校验的压缩格式。

compress

一种使用 Lempel-Ziv-Welch(LZW)算法的压缩格式。

deflate

一种使用 zlib 结构和 deflate 压缩算法的压缩格式。

br

一种使用 Brotli 算法的压缩格式。

zstd

一种使用 Zstandard 算法的压缩格式。

identity

表示恒等函数(即不作任何修改或压缩)。即使省略,此值始终被视为是可接受的。

*

匹配其他任意未在该请求标头字段中列出的编码方式。假如该请求标头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。

;q=(q 值加权)

任何值都按照使用称为权重的相对质量价值表达的优先级顺序排列。

示例

http
Accept-Encoding: gzip

Accept-Encoding: gzip, compress, br

Accept-Encoding: gzip, compress, br, zstd

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

规范

Specification
HTTP Semantics
# field.accept-encoding

浏览器兼容性

BCD tables only load in the browser

参见