The Accept-Encoding
request HTTP header advertises which content encoding, usually a compression algorithm, the client is able to understand. Using content negotiation, the server selects one of the proposals, uses it and informs the client of its choice with the Content-Encoding
response header.
Even if both the client and the server supports the same compression algorithms, the server may choose not to compress the body of a response, if the identity value is also acceptable. Two common cases lead to this:
- The data to be sent is already compressed and a second compression won't lead to smaller data to be transmitted. This may the case with some image formats;
- The server is overloaded and cannot afford the computational overhead induced by the compression requirement. Typically, Microsoft recommends not to compress if a server use more than 80 % of its computational power.
As long as the identity
value, meaning no encoding, is not explicitly forbidden, by an identity;q=0
or a *;q=0
without another explicitly set value for identity, the server must never send back a 406
Not Acceptable
error.
-
An IANA registry maintains a complete list of official content encodings.
- Two others content encoding,
bzip
andbzip2
, are sometimes used, though not standard. They implement the algorithm used by these two UNIX programs. Note that the first one was discontinued due to patent licensing problems.
Header type | Request header |
---|---|
Forbidden header name | yes |
Syntax
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
Directives
gzip
- A compression format using the Lempel-Ziv coding (LZ77), with a 32-bit CRC.
compress
- A compression format using the Lempel-Ziv-Welch (LZW) algorithm.
deflate
- A compression format using the zlib structure, with the deflate compression algorithm.
br
- A compression format using the Brotli algorithm.
identity
- Indicates the identity function (i.e. no compression, nor modification). This value is always considered as acceptable, even if not present.
*
- Matches any content encoding not already listed in the header. This is the default value if the header is not present. It doesn't mean that any algorithm is supported; merely that no preference is expressed.
;q=
(qvalues weighting)- Any value is placed in an order of preference expressed using a relative quality values called weight.
Examples
Accept-Encoding: gzip Accept-Encoding: gzip, compress, br Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1
Specifications
Specification | Title |
---|---|
RFC 7231, section 5.3.4: Accept-Encoding | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context |
Browser compatibility
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Feature | Chrome | Firefox | Edge | 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) |
See also
- HTTP content negotiation
- Header with the result of the content negotiation:
Content-Encoding
- Other similar headers:
TE
,Accept
,Accept-Charset
,Accept-Language