Accept-Encoding
Accept-Encoding
请求的 HTTP 标头通告其内容编码,通常是一个压缩算法中,客户端是能够理解的。使用内容协商,服务器选择其中一个提议,使用它并通过Content-Encoding
响应头向客户端通知其选择。
即使客户端和服务器都支持相同的压缩算法,如果身份值也可以接受,服务器可能会选择不压缩响应的主体。两种常见情况导致这种情况:
- 要发送的数据已经被压缩,并且第二次压缩不会导致传输更小的数据。这可能是一些图像格式的情况;
- 服务器过载并且无法承受由压缩需求引起的计算开销。通常,如果服务器使用80%以上的计算能力,Microsoft 建议不要进行压缩。
只要该identity
值(即没有编码)没有被明确禁止,通过一个identity;q=0
或一个*;q=0
没有明确设定的身份值,服务器就不能发回406
Not Acceptable
错误。
注:
- IANA 注册管理机构保留官方内容编码的完整列表。
- 另外两个内容编码,
bzip
并且bzip2
,有时使用,虽然不是标准。他们实现这两个 UNIX 程序使用的算法。请注意,由于专利许可问题,第一个中断。
Header type | Request header |
---|---|
Forbidden header name | yes |
语法
Accept-Encoding: gzip Accept-Encoding: compress Accept-Encoding: deflate Accept-Encoding: br 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 算法的压缩格式。
identity
指示身份功能(即不压缩,也不修改)。即使不存在,该值始终被认为是可以接受的。
*
匹配尚未在标题中列出的任何内容编码。如果标题不存在,这是默认值。这并不意味着支持任何算法; 只是表示没有偏好。
;q=
( q 值加权)任何值都按照称为权重的相对质量值的优先顺序排列。
例子
Accept-Encoding: gzip Accept-Encoding: gzip, compress, br Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
规范
Specification | Title |
---|---|
RFC 7231, section 5.3.4: Accept-Encoding | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |