/ HTTP Headers

Accept-Encoding

The Accept-Encoding HTTP header is an essential component of the HTTP protocol that allows a client to specify which encoding algorithms it can understand. It facilitates effective content negotiation and is a significant contributor to optimizing data transmission between client and server.

The Purpose of Accept-Encoding

This request header is used during content negotiation when the client communicates to the server which encoding schemes it can decode. In turn, the server can use this information to send data in an optimal format, often compressed, to reduce data size for transfer and increase speed.

Syntax

The Accept-Encoding header uses the following syntax:

Accept-Encoding: <encoding>

Where <encoding> denotes the preferred encoding schemes. You can specify multiple encodings separated by commas, and can use quality factors (q) to indicate preference:

Accept-Encoding: <encoding>, <encoding>;q=<quality_factor>

Possible Values

The Accept-Encoding header supports several common encoding schemes:

  • gzip: The file is encoded using the GNU zip algorithm.
  • compress: The file is compressed using the UNIX “compress” program.
  • deflate: The file is compressed using the zlib structure (RFC 1950) in combination with the deflate compression algorithm (RFC 1951).
  • br: The file is encoded using the Brotli algorithm.
  • identity: The file has no encoding.
  • *: Any encoding applicable.

How it Works: Request and Response

To illustrate the Accept-Encoding header in action, let’s examine a typical request-response cycle:

Request

For instance, if a client can handle gzip and br encoding schemes but prefers br, it could send a request like this:

GET /document HTTP/1.1
Host: example.com
Accept-Encoding: br, gzip;q=0.9

Here, the client is signaling that it prefers the br (Brotli) encoding but can also accept gzip, albeit with lower preference.

Response

The server, in turn, uses this Accept-Encoding information to select the appropriate encoding for the response. If possible, it will encode the response using the client’s preferred scheme.

The response to the previous request might look like this:

HTTP/1.1 200 OK
Content-Encoding: br
Content-Type: text/html

...(Brotli-compressed data)...

In this response, the server indicates that it’s sending HTML content encoded using Brotli. If the server cannot deliver a response in an encoding acceptable to the client, it can send the data without any encoding (using ‘identity’).

Compatibility

The Accept-Encoding header is part of the HTTP/1.1 specification and is widely supported across all modern browsers and servers.

Summary

The Accept-Encoding HTTP header plays a critical role in efficient content negotiation between the client and server, enabling clients to specify their supported encoding schemes. Its correct use significantly optimizes data transmission, often by allowing compressed data to be sent. Understanding Accept-Encoding is essential for developing high-performance web applications.

Was this helpful?

Thanks for your feedback!