Accept-Encoding

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

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

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Accept-Encoding

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见