首页 > 解决方案 > HTTP Accept-Language 语言环境字符串的预期格式是什么?

问题描述

在 Mac OS Chrome 浏览器 (v87) 上,当我发出 HTTP 请求时,我观察到 Accept-Language 标头,如下所示:

accept-language: en-US,en;q=0.9,es;q=0.8,es-MX;q=0.7

在 Mac OS Safari 浏览器 (v13.1.3) 上,当我发出相同的 HTTP 请求时,我观察到 Accept-Language 标头如下:

Accept-Language: en-us

我的问题是,上述两种格式都正确吗?大写“en-US”和小写“en-us”之间的差异实际上导致了某些路由代码中的错误。

标签: httphttp-headersinternationalizationhttp2

解决方案


是的,您提供的两个示例都符合Accept-Language标头的指定语法。

该语法在 RFC 7231 中明确说明。简单地说,该值是一个以逗号分隔的语言标签列表,其中每个标签可选地后跟一个分号和一个权重 ( ;q=...),指示该语言的可取性。

规范明确规定必须以不区分大小写的方式进行比较,因此任何根据大小写产生不同行为的“路由代码”都不符合 HTTP 规范。

语言标签和语言范围将被视为不区分大小写:存在一些子标签大写的约定,但这些不得被认为具有意义。语言标签与语言范围的匹配必须以不区分大小写的方式进行。


推荐阅读