Заголовок Accept-Charset относится к группе заголовков посвященных согласованию содержимого. Он отвечает за согласование кодировок. Если ресурс на сервере представлен в нескольких кодировках, то клиенту предоставляется возможность выбрать наиболее для него предпочтительную.

Согласование содержимого со стороны клиента

Заголовок запроса Accept-Charset, наряду с другими заголовками согласования содержимого, появился еще в протоколе HTTP/1.0 Тогда этот заголовок мог содержать список предпочтительных кодировок, перечисленных через запятую.

HTTP
Accept-Charset: windows-1251, utf-8

В протоколе HTTP/1.1 появилась возможность снабжать каждую кодировку параметром q - оценка качества (qvalue). Если кодировки в списке отделяются друг от друга запятыми, то параметры отделяются от самой кодировки и друг от друга точкой с запятой, а имя параметра отделяется от значения параметра символом "=": кодировка; параметр=значение, кодировка; параметр=значение; параметр=значение, и т.д.
Оценка качества — это число от 0 до 1, определяющее степень предпочтения клиентом той или иной кодировки. Более предпочтительные кодировки помечаются более высокой оценкой качества. Если оценка качества кодировки отсутствует, то по умолчанию ей ставится наивысшая оценка 1.

HTTP
Accept-Charset: windows-1251;q=0.5, utf-8, *;q=0.3

Так же в HTTP/1.1 появилась возможность обобщать все кодировки с помощью символа звездочки "*". Если в заголовке отсутствует обобщение "*", то все явно не упомянутые кодировки получают оценку качества равную 0, что обозначает их как неприемлемые, за исключением кодировки ISO-8859-1, которая получает оценку качества равную 1, если явно не задана иная оценка.

Согласование содержимого со стороны сервера

Концепция согласования содержимого со стороны сервера появилась только в протоколе HTTP/1.1
Запрос клиента предшествует ответу сервера, поэтому целесообразно стратегию согласования содержимого начинать с предпочтений клиента. Если же сервер определяет, что он не может предложить клиенту ресурс ни в одной из указанных им кодировок, он должен (уровень SHOULD) послать ему ответ с кодом состояния 406 Not Acceptable.

Если же на сервере ресурс представлен всего в одной кодировке, то вместо ответа 406 Not Acceptable спецификация рекомендует вернуть ресурс, игнорируя заголовок Accept-Charset.

Комментарии:

  1. Александр

     

    Коротко и ясно )

    • Александр

       

      P.S.
      Mozilla 5 и Google Chrome пишут Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
      IE6 через IETester, IE8 и Opera (у меня 9.80) не пишут Accept-Charset

      Проверено с помощью php функцией print_r($_SERVER);