Accept-Language 头部
HTTP Accept-Language
请求头指示客户端首选的自然语言和区域设置。服务器使用内容协商来选择其中一个提议,并通过 Content-Language
响应头告知客户端其选择。浏览器根据其活动用户界面语言设置此头部所需的值。用户还可以通过浏览器设置配置其他首选语言。
Accept-Language
头部通常列出与 navigator.languages
属性相同的区域设置,且 q
值(质量值)递减。一些浏览器,如 Chrome 和 Safari,会在 Accept-Language
中添加仅限语言的备用标签。例如,当 navigator.languages
为 ["en-US", "zh-CN"]
时,Accept-Language
可能为 en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
。出于隐私目的(减少指纹识别),Accept-Language
和 navigator.languages
可能都不会包含完整的用户偏好列表。例如,在 Safari(总是如此)和 Chrome 的无痕模式下,只列出一种语言。
当服务器无法通过其他方式(例如,使用依赖于明确用户决策的特定 URL)确定目标内容语言时,此头部可作为提示。服务器绝不应覆盖明确的用户语言选择。Accept-Language
的内容通常不在用户控制范围内(例如,旅行时)。用户也可能希望访问与用户界面语言不同的页面。
当无法提供匹配语言的内容时,服务器可能会返回 406 Not Acceptable
错误代码,但这很少实现。在这种情况下,服务器通常会忽略 Accept-Language
头部,而是发送一个成功的响应,其中包含最合适的资源,以提供更好的用户体验。
头类型 | 请求头 |
---|---|
禁止请求头 | 否 |
CORS 安全列表请求头 | 是* |
* 值只能是 0-9
、A-Z
、a-z
、空格或字符 *,-.;=
。
语法
Accept-Language: <language>
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>
-
一个语言标签(有时被称为“区域设置标识符”)。它由一个 2-3 个字母的基础语言标签组成,表示一种语言,后面可选地跟着由
-
分隔的附加子标签。最常见的额外信息是国家或地区变体(如en-US
或fr-CA
)或要使用的字母类型(如sr-Latn
)。其他变体,如拼写类型(de-DE-1996
),通常不在此头部的上下文中使用。 *
(通配符)-
Accept-Language
字段中不存在的其他任何语言都未匹配的语言。 ;q=
(q-factor 权重)-
使用相对质量值(称为权重)表示偏好顺序的任何值。质量值默认为
1
。
示例
使用 Accept-Language 头部
以下请求偏好使用 de
基础语言的德语
Accept-Language: de
在 Accept-Language 中使用质量值
以下请求表明对丹麦语有更强的偏好,但以较低的优先级接受英式英语和其他类型的英语
Accept-Language: da, en-gb;q=0.8, en;q=0.7
规范
规范 |
---|
HTTP 语义 # field.accept-language |
浏览器兼容性
加载中…
另见
- HTTP 内容协商
- 包含内容协商结果的头部:
Content-Language
- 其他类似头部:
TE
、Accept-Encoding
、Accept