Accept-Encoding

优质
小牛编辑
126浏览
2023-12-01

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)