Accept-Language请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言。借助内容协商机制,服务器可以从诸多备选项中选择一项进行应用, 并使用Content-Language 应答头通知客户端它的选择。浏览器会基于其用户界面语言来为这个请求头设置合适的值,即便是用户可以进行修改,但是这种情况极少发生 (and is frown upon as it leads to fingerprinting)。

当服务器无法通过其他方式来确定应当使用的语言时——例如某一特定的URL,这是用户明确指定的——这个请求头可以用作提示。建议服务器端永远不要覆盖明确指定的信息。 Accept-Language消息头的内容通常不在用户的掌控之中(例如在国外旅行时到提供网络服务的场所上网);另外用户可能会想要浏览非本地用户界面语言的页面。

如果服务器不能提供任何可以匹配的语言的版本,那么理论上来说应该返回一个 406 (Not Acceptable,不被接受) 的错误码。但是为了更好的用户体验,这种方法很少被采用,取而代之的是将其忽略。

Header type Request header
Forbidden header name no
CORS-safelisted request-header yes

语法

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>
完整的语言标签。除了语言本身之外,还会包含其他方面的信息,显示在中划线("-")后面。最常见的额外信息是国家或地区变种(如"en-US")或者表示所用的字母系统(如"sr-Lat")。其他变种诸如拼字法("de-DE-1996")等通常不被应用在这种场合。
*
任意语言;"*"表示通配符。
;q= (q-factor weighting)
值代表优先顺序,用相对质量价值 表示,又称为权重。

示例

Accept-Language: de

Accept-Language: de-CH

Accept-Language: en-US,en;q=0.5

规范

Specification Title
RFC 7231, section 5.3.5: Accept-Language Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes Yes Yes Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support Yes Yes Yes Yes Yes Yes Yes

参见

文档标签和贡献者

 此页面的贡献者: WayneCui, yuankunzhang
 最后编辑者: WayneCui,