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