Skip to content

Accept-Charset

Description

The Accept-Charset request header is an HTTP header used by clients (such as web browsers or API consumers) to specify the character encodings they are willing to accept in the response from the server. This allows clients to communicate their preferred text encoding formats, ensuring that the received data can be properly interpreted and displayed.

The server processes the Accept-Charset header and, if possible, responds with content encoded in one of the requested character sets. If the server cannot fulfill the request with an acceptable charset, it may respond with a 406 Not Acceptable status or choose a default encoding.

Although Accept-Charset was more commonly used in the past, modern web applications typically rely on UTF-8 as the dominant encoding, reducing the necessity of this header in most cases.

Syntax

The syntax of the Accept-Charset header follows this structure:

Accept-Charset: <charset>[, <charset>]*[;q=<quality>]
  • <charset>:
    The character encoding the client prefers (e.g., UTF-8, ISO-8859-1, Windows-1252, etc.).
  • q=<quality>:
    An optional parameter representing the quality factor (a value between 0 and 1) to indicate preference order.
  • Multiple charsets can be specified, separated by commas.

Example Syntax

Accept-Charset: utf-8, iso-8859-1;q=0.8, utf-16;q=0.6

This example tells the server that the client prefers UTF-8 but can also accept ISO-8859-1 (with a lower preference) and UTF-16 (with an even lower preference).

Examples

Basic Example

A client request specifying UTF-8 encoding:

GET /resource HTTP/1.1
Host: example.com
Accept-Charset: utf-8

If the server supports UTF-8, it responds with:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body>Hello, world!</body>
</html>

Example with Multiple Charsets

A request allowing multiple character sets with quality factors:

GET /data HTTP/1.1
Host: example.com
Accept-Charset: utf-8, iso-8859-1;q=0.8

If the server prefers UTF-8, it responds accordingly:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8

Data in UTF-8 encoding.

If the server does not support UTF-8 but supports ISO-8859-1, it may respond with that encoding:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=iso-8859-1

Data in ISO-8859-1 encoding.

Summary

The Accept-Charset header enables clients to specify their preferred character encodings, ensuring proper text interpretation in responses. While once crucial in handling various encodings, its importance has diminished with the widespread adoption of UTF-8 as the default character encoding. Nonetheless, in scenarios where multiple encodings are required, Accept-Charset provides a useful way to negotiate encoding preferences between clients and servers.