Alamofire: 某些语言/区域组合的 Accept-Language 标头不正确

创建于 2017-04-07  ·  3评论  ·  资料来源: Alamofire/Alamofire

Alamofire产生Accept-Language使用标头preferredLanguages的属性Locale ,这是语言和该区域的组合。

这适用于标准组合: en-USfr-FRfr-CA ...

但是,如果用户选择的语言与地区不匹配,我们会得到一个不能用作Accept-Language

以配置如下组合的设备为例:

  • 语言:法语
  • 地区:美国

第一个preferredLanguages然后是fr-US ,它不代表真正的语言(美国没有特定版本的法语)。

因此,生成的Accept-Language包含在许多情况下无法识别的值。 这是有效代码的列表

在法国/美国设备上,Alamofire 生成以下Accept-Languagefr-US;q=1.0, en-US;q=0.9
这个 PHP 函数没有正确识别它,它试图找出最好的可用语言环境。 它将返回en而不是fr

相比之下,Safari iOS 确保发送有效的Accept-Language

在法国/美国设备上,发送的Accept-Languagefr-fr 。 (这是一种快速了解浏览器发送的 HTTP 标头的

理想情况下,Alamofire 应该生成与 Safari 相同的Accept-Language

  • Xcode 版本:8.2.1
  • iOS 版本:iOS 10
http headers question

最有用的评论

@simonliotier

感谢您在这里的详细报告……非常感谢。 我们都需要记住的是,虽然您的用例不想收到fr-US ,但其他人可能会。 您始终可以在服务器端将fr-US转换fr-FR以进行适当的映射,但您永远不知道如何将fr-FR反转fr-US

默认情况下,Alamofire 仅设置Accept-Language ,但我们非常欢迎您针对您的特定用例覆盖它。 我认为我们尝试使用户的语言环境更通用是不正确的。

干杯。 🍻

所有3条评论

感谢报告! 但是,我在RFC 7231中找不到正式说明这些组合的文档。 你能指点我们吗? 否则,我们似乎需要维护一个可能组合到可接受组合的静态映射,这可能不是我们想要做的事情。

我也找不到官方名单。 我猜 Safari 有自己的可接受组合列表。 😕

@simonliotier

感谢您在这里的详细报告……非常感谢。 我们都需要记住的是,虽然您的用例不想收到fr-US ,但其他人可能会。 您始终可以在服务器端将fr-US转换fr-FR以进行适当的映射,但您永远不知道如何将fr-FR反转fr-US

默认情况下,Alamofire 仅设置Accept-Language ,但我们非常欢迎您针对您的特定用例覆盖它。 我认为我们尝试使用户的语言环境更通用是不正确的。

干杯。 🍻

此页面是否有帮助?
0 / 5 - 0 等级