Accept-Language 头部

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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-Languagenavigator.languages 可能都不会包含完整的用户偏好列表。例如,在 Safari(总是如此)和 Chrome 的无痕模式下,只列出一种语言。

当服务器无法通过其他方式(例如,使用依赖于明确用户决策的特定 URL)确定目标内容语言时,此头部可作为提示。服务器绝不应覆盖明确的用户语言选择。Accept-Language 的内容通常不在用户控制范围内(例如,旅行时)。用户也可能希望访问与用户界面语言不同的页面。

当无法提供匹配语言的内容时,服务器可能会返回 406 Not Acceptable 错误代码,但这很少实现。在这种情况下,服务器通常会忽略 Accept-Language 头部,而是发送一个成功的响应,其中包含最合适的资源,以提供更好的用户体验。

头类型 请求头
禁止请求头
CORS 安全列表请求头 是*

* 值只能是 0-9A-Za-z、空格或字符 *,-.;=

语法

http
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-USfr-CA)或要使用的字母类型(如 sr-Latn)。其他变体,如拼写类型(de-DE-1996),通常不在此头部的上下文中使​​用。

* (通配符)

Accept-Language 字段中不存在的其他任何语言都未匹配的语言。

;q=(q-factor 权重)

使用相对质量值(称为权重)表示偏好顺序的任何值。质量值默认为 1

示例

使用 Accept-Language 头部

以下请求偏好使用 de 基础语言的德语

http
Accept-Language: de

在 Accept-Language 中使用质量值

以下请求表明对丹麦语有更强的偏好,但以较低的优先级接受英式英语和其他类型的英语

http
Accept-Language: da, en-gb;q=0.8, en;q=0.7

规范

规范
HTTP 语义
# field.accept-language

浏览器兼容性

另见