如何检测客户端站点中的浏览器国家/地区?

Posted

技术标签:

【中文标题】如何检测客户端站点中的浏览器国家/地区?【英文标题】:How to detect browser country in client site? 【发布时间】:2018-06-24 23:18:50 【问题描述】:

我发现以下网站即使在私密模式下也能检测到我的国家和货币

http://www.innisfreeworld.com/

它记录在cookie中,它是怎么做到的?

这可能在客户网站上实现吗?导航器?

【问题讨论】:

可能使用 geoIP 查找。这在服务器端运行,与浏览器地理位置非常不同。 ***.com/questions/3489460/… 它应该使用 IP 地理定位技术。解释可以参考geolocation.com。 【参考方案1】:

有多个选项可以确定语言环境。按有用性降序排列,它们是:

    查找IP地址,with an IP geolocation service,如Maxmind GeoIP。这是请求来自的位置,即如果美国人在意大利度假并使用瑞典 ***,它将返回 Sweden

只能在服务器的帮助下完成。主要优点是它非常可靠。准确度将是免费服务的国家或地区,付费服务的城市或地区。

    在浏览器中使用geolocation API 查找地球上的精确位置。使用瑞典 *** 在意大利度假的美国人将注册为意大利。

答案将非常精确,通常不会超过 10m。原则上,它可以在客户端工作,尽管您可能希望在服务器上执行坐标 -> 国家/地区查找。主要缺点是并非所有设备都具有 GPS 或 WiFi 位置,而且通常需要明确的用户同意。

    查看服务器上的Accept-Language 标头(或在服务器的帮助下),并提取语言环境信息。使用瑞典 *** 在意大利度假的美国人将注册为美国。

缺点是这是一个非常容易更改的设置。例如,世界各地的英语使用者可能更喜欢en-US 设置,以避免机器翻译文本。在现代浏览器上(在编写时不是 IE/Edge,只有 Safari 11+),您还可以请求 navigator.languages。

    navigator.languagenavigator.languages 标头的第一个元素。 navigator.languages 的所有注意事项都适用。最重要的是,这些信息有时可能只是没有任何语言环境的语言(即en 而不是en-US)。

    使用另一个第三方服务。例如,如果用户通过 Facebook connect 等单点登录系统登录,您可以请求用户的家乡。此信息通常非常不可靠,需要第三方提供。

【讨论】:

所以..如果不征得用户许可(地理定位 api),就无法在客户端进行检测,对吧? 否,选项 3 适用于较新的客户端,4 适用于所有客户端。选项 5 可以通过与第三方服务(如谷歌分析)协作而无需用户交互即可工作。这些都不需要征求用户的许可。 同样,大多数 geoip 服务都需要您使用 API 密钥。在前端这样做会暴露您的 API 密钥……有人可能会使用它并滥用它。 GeoIP 也不请求许可,对吗? @dinvlad 正确,GeoIP 完全是服务器端的,浏览器甚至不会注意到它。【参考方案2】:

另一个选项可能是使用 (internationalization API)

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

【讨论】:

可能无法准确运行,因为一个时区可能位于多个国家/地区。例如,Europe/Zurich 位于德国、瑞士和列支敦士登.. @Aamnah 实际上每个国家/地区都有单独的时区定义(例如Europe/BerlinEurope/Vaduz),用户可能设置正确。但绝对不能保证。

以上是关于如何检测客户端站点中的浏览器国家/地区?的主要内容,如果未能解决你的问题,请参考以下文章

在Java Servlet中自动为用户选择国家/地区和语言

修复了用于测试国家/地区检测的全球IP?

如何将网络聊天发送到国家/地区?

MVC 3 - 基于国家的重定向?

是否可以通过 JavaScript 中的浏览器确定操作系统中设置的用户区域设置的**国家**?

如何将mysql日期时间转换为客户端日期时间? [复制]