HTTP接受语言区域设置字符串的预期格式是什么?

HTTP接受语言区域设置字符串的预期格式是什么?,http,http-headers,internationalization,http2,Http,Http Headers,Internationalization,Http2,在Mac OS Chrome浏览器(v87)上,当我发出HTTP请求时,我观察到一个Accept Language标头,如下所示: accept-language: en-US,en;q=0.9,es;q=0.8,es-MX;q=0.7 Accept-Language: en-us 在Mac OS Safari浏览器(v13.1.3)上,当我发出相同的HTTP请求时,我观察到Accept Language标头,如下所示: accept-language: en-US,en;q=0.9,es;

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

accept-language: en-US,en;q=0.9,es;q=0.8,es-MX;q=0.7
Accept-Language: en-us
在Mac OS Safari浏览器(v13.1.3)上,当我发出相同的HTTP请求时,我观察到Accept Language标头,如下所示:

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

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

是的,您提供的两个示例都符合
接受语言
标题的指定语法

该语法在RFC 7231中有详细说明。简单地说,该值是一个逗号分隔的语言标记列表,其中每个标记后面可选地跟一个分号和一个表示语言可取性的权重(
;q=…

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

语言标记和语言范围应视为大小写- 不敏感:某些文件的大小写存在约定 子标签,但这些子标签不得被视为具有意义。 必须在案例中完成语言标记与语言范围的匹配- 麻木不仁的态度