Accept and Accept-Charset - Which is superior?

http, http-headers

Solution

Altough you can set media type in `Accept` header, the `charset` parameter definition for that media type is not defined anywhere in RFC 2616 (but it is not forbidden, though).

Therefore if you are going to implement a HTTP 1.1 compliant server, you shall first look for `Accept-charset` header, and then search for your own parameters at `Accept` header.

Problem

In HTTP you can specify in a request that your client can accept specific content in responses using the `accept` header, with values such as `application/xml`. The content type specification allows you to include parameters in the content type, such as `charset=utf-8`, indicating that you can accept content with a specified character set. There is also the `accept-charset` header, which specifies the character encodings which are accepted by the client. If both headers are specified and the `accept` header contains content types with the charset parameter, which should be considered the superior header by the server? e.g.: ``` Accept: application/xml; q=1, text/plain; charset=ISO-8859-1; q=0.8 Accept-Charset: UTF-8 ``` I've sent a few example requests to various servers using Fiddler to test how they respond: Examples W3 Request ``` GET http://www.w3.org/ HTTP/1.1 Host: www.w3.org Accept: text/html;charset=UTF-8 Accept-Charset: ISO-8859-1 ``` Response ``` Content-Type: text/html; charset=utf-8 ``` Google Request ``` GET http://www.google.co.uk/ HTTP/1.1 Host: www.google.co.uk Accept: text/html;charset=UTF-8 Accept-Charset: ISO-8859-1 ``` Response ``` Content-Type: text/html; charset=ISO-8859-1 ``` StackOverflow Request ``` GET http://stackoverflow.com/ HTTP/1.1 Host: stackoverflow.com Accept: text/html;charset=UTF-8 Accept-Charset: ISO-8859-1 ``` Response ``` Content-Type: text/html; charset=utf-8 ``` Microsoft Request ``` GET http://www.microsoft.com/ HTTP/1.1 Host: www.microsoft.com Accept: text/html;charset=UTF-8 Accept-Charset: ISO-8859-1 ``` Response ``` Content-Type: text/html ``` There doesn't seem to be any consensus around what the expected behaviour is. I am trying to look surprised.

Original source