Accept-Encoding

Accept-Encoding 请求 HTTP 头部指示客户端可以理解的内容编码(通常是压缩算法)。服务器使用内容协商来选择其中一个建议,并使用Content-Encoding响应头部告知客户端其选择。

即使客户端和服务器都支持相同的压缩算法,如果 identity 值也可用,服务器可能选择不压缩响应主体。两种常见的情况导致了这种情况

  • 要发送的数据已经压缩,因此第二次压缩不会减少传输的数据大小。对于预压缩的图像格式(例如 JPEG)来说这是真的;
  • 服务器负载过重,无法分配计算资源来执行压缩。例如,微软建议如果服务器使用了超过 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: identity
Accept-Encoding: *

// Multiple algorithms, weighted with the quality value syntax:
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= (qvalues 加权)

任何值都按使用称为权重的相对质量值表达的偏好顺序排列。

示例

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

规范

规范
HTTP 语义
# field.accept-encoding

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅