【问题标题】:What is the expected format of HTTP Accept-Language locale string?HTTP Accept-Language 语言环境字符串的预期格式是什么?
【发布时间】:2021-08-25 07:54:25
【问题描述】:

在 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”之间的差异实际上导致了某些路由代码中的错误。

【问题讨论】:

    标签: http http-headers internationalization http2


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      作为这个问题的后续行动。根据 HTTP,小写的语言环境字符串可能是有效的。但它已被确认为 WebKit 中的一个错误。

      来源: https://bugs.webkit.org/show_bug.cgi?id=163096

      【讨论】:

      • 感谢您的反馈。澄清一下,该错误与 HTTP 标头无关,而与 DOM API 有关。具体来说,window.navigator.language 的值必须使用大写的国家代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2019-08-29
      • 2017-11-08
      • 2023-02-23
      • 1970-01-01
      • 2020-06-03
      • 2016-03-09
      相关资源
      最近更新 更多