浏览器使用哪些信息来创建Accept-Language字符串?

时间:2015-03-12 09:31:21

标签: google-chrome http firefox locale

我正在尝试尽可能多地获取有关访问网站的用户的区域信息。使用例如IP将IP映射到国家ipinfo.io是一种方法,但我也在探索Accept-Language标题。在PHP中使用HTTP_ACCEPT_LANGUAGE获取此信息。我想问一下是否有人知道这是如何计算的?我知道这取决于浏览器,并且实现方式因浏览器而异,但是有没有可用的文档或有趣的文章?

我正在使用Linux,我的操作系统语言是英语,我有瑞典语键盘布局。对于Chrome,我看到了这个字符串:

en-US,en;q=0.8,nl;q=0.6,sv;q=0.4

这表明我对英语和瑞典语感兴趣,这是有道理的,但那里也有荷兰语,这可能来自哪里?

对于Firefox,我只看到:

en-US,en;q=0.5

是否有人对此进行过更多研究?关于如何获取有关网站访问者的区域信息的任何其他提示或评论?

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能取决于浏览器和平台。在unix类型的操作系统上,您可以使用locale命令找到系统区域设置:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

您也可以使用相同的命令或通过OSX系统首选项应用程序进行设置。浏览器可能默认为系统区域设置,但其中大多数还将为用户提供一种在浏览器中更改其首选项的方法。有关概述,请参阅http://www.w3.org/International/questions/qa-lang-priorities.en.php

以下是一些与设置实际接受语言标题相关的Chrome代码:https://code.google.com/p/chromium/codesearch#chromium/src/ui/base/l10n/l10n_util.cc&q=AcceptLanguage&sq=package:chromium&type=cs&l=856

这是一个与accept-language标题相关的firefox错误报告,其中包含许多有趣的讨论以及与设置标题相关的差异链接:https://bugzilla.mozilla.org/show_bug.cgi?id=1054739

这是一篇mozilla开发人员文章,其中提供了有关accept-language标头的一些详细信息,以及一些相关的标题:https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation

最终,接受语言可由用户控制(并且有很多浏览器扩展可以快速修改它),因此虽然检测用户的语言偏好很有用,但它并不一定会告诉您有关其位置的任何信息。您可以将其与其他信息(例如用户的时区(可从javascript获得))结合使用,但如果您确实需要位置信息,那么http://ipinfo.io之类的内容是您最好的选择。