Accept-Language
сообщает серверу, какие языки клиент понимает и какая локаль предпочтительнее (имеются в виду естественные языки, такие как английский, а не языки программирования). Используя механизм обсуждения содержимого (content negotiation), сервер выбирает один из предложенных вариантов, использует его и информирует клиента о своем выборе при помощи заголовка ответа Content-Language
. Браузеры устанавливают соответствующие значения для данного заголовка, исходя из языка пользовательсокого интерфейса, и, даже если у пользователя есть возможность изменить значение заголовка Accept-Language
, это происходит редко (и не одобряется, так как ведет.к идентификации).Данный заголовок является подсказкой для сервера, когда он не имеет другого способа определить язык, (например, явно указанный язык в URL'е, который пользователь явно выбрал). Рекомендуется никогда не переопределять на стороне сервера явный выбор пользователем языка. Содержимое заголовка Accept-Language
часто не может быть переопределено пользователем (например, в путешествии, когда пользователь пользуется услугами интернет-кафе); также пользователь может захотеть посмотреть содержимое сайта на языке отличном от языка интерфейса.
Если сервер не может предоставить содержимое ни на одном языке из предложенных в заголовке Accept-Language
, теоретически он может вернуть HTTP-статус 406
(Not Acceptable). Однако, для большего удобства пользователя, это делается редко, а чаще принято в таких случаях игнорировать заголовок Accept-Language
.
Header type | Request header |
---|---|
Forbidden header name | нет |
CORS-safelisted request-header | да |
Синтаксис
Accept-Language: <language> Accept-Language: <locale> Accept-Language: * // Multiple types, weighted with the quality value syntax: Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
Директивы
<language>
- Тег языка (иногда называют идентификатором локали, "locale identifier"). Состоит из 2-3 буквенного основного языкового тега, представляющего язык, и опционально за ним могут следовать дополнительные под-теги, разделенные
'-'
. Наиболее распространенной дополнительной информацией являются указания на страну или регион (например,'en-US'
или'fr-CA'
) или тип алфавита, который следует использовать (например,'sr-Latn'
). Другие варианты, такие как тип орфографии ('de-DE-1996'
) обычно не используются в контексте данного заголовка. *
- Любой язык;
'*'
обозначает любое значение. ;q=
(q-factor weighting)- Любое из значений, размещенных в порядке предпочтения, выраженном позицией quality value, которое называют весами.
Примеры
Accept-Language: * Accept-Language: de Accept-Language: de-CH Accept-Language: en-US,en;q=0.5 Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 Accept-Language: ru-RU, ru;q=0.9, en-US;q=0.8, en;q=0.7, fr;q=0.6
Спецификации
Спецификация | Название |
---|---|
RFC 7231, секция 5.3.5: Accept-Language | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context |
Совместимость с браузером
BCD tables only load in the browser
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.
Смотрите также
- HTTP content negotiation
- Header with the result of the content negotiation:
Content-Language
- Other similar headers:
TE
,Accept-Encoding
,Accept-Charset
,Accept