如何检测客户端站点中的浏览器国家?
How to detect browser country in client site?
我发现以下网站即使在隐私模式下也能检测到我的国家和货币
http://www.innisfreeworld.com/
它记录在cookie中,它是怎么做到的?
是否可以在客户网站上实现?导航器?
有多个选项可以确定语言环境。按有用性降序排列,这些是:
- 查找 IP 地址、with an IP geolocation service like Maxmind GeoIP。这是请求的来源位置,即如果美国人在意大利度假并使用瑞典 VPN,它将 return
Sweden
.
这只能在服务器的帮助下完成。主要优点是它非常可靠。免费服务的准确度为国家或地区,付费服务的准确度为城市或地区。
- 使用 geolocation API 从浏览器中查找地球上的精确位置。使用瑞典 VPN 在意大利度假的美国人将注册为意大利。
答案会很精确,一般不超过10m。原则上,它可以工作 client-side,尽管您可能希望在服务器上执行坐标 -> 国家/地区查找。主要缺点是并非所有设备都具有 GPS 或 WiFi 位置,并且通常需要明确的用户同意。
- 查看服务器上的
Accept-Language
header(或在服务器的帮助下),并提取语言环境信息。使用瑞典 VPN 在意大利度假的美国人将注册为美国。
缺点是这是一个非常容易更改的设置。例如,世界各地的英语使用者可能更喜欢 en-US
设置以避免 machine-translated 文本。在现代浏览器上(写作时不是 IE/Edge,只有 Safari 11+),你也可以请求 navigator.languages.
navigator.language
是navigator.languages
header的第一个元素。 navigator.languages 的所有注意事项均适用。最重要的是,此信息有时可能只是没有任何语言环境的语言(即 en
而不是 en-US
)。
使用另一个 third-party 服务。例如,如果用户通过 Facebook 连接等 Single-Sign-On 系统登录,您可以请求用户的家乡。此信息通常非常不可靠,需要第三方。
另一种选择可能是使用 (internationalization API)
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
我发现以下网站即使在隐私模式下也能检测到我的国家和货币
http://www.innisfreeworld.com/
它记录在cookie中,它是怎么做到的?
是否可以在客户网站上实现?导航器?
有多个选项可以确定语言环境。按有用性降序排列,这些是:
- 查找 IP 地址、with an IP geolocation service like Maxmind GeoIP。这是请求的来源位置,即如果美国人在意大利度假并使用瑞典 VPN,它将 return
Sweden
.
这只能在服务器的帮助下完成。主要优点是它非常可靠。免费服务的准确度为国家或地区,付费服务的准确度为城市或地区。
- 使用 geolocation API 从浏览器中查找地球上的精确位置。使用瑞典 VPN 在意大利度假的美国人将注册为意大利。
答案会很精确,一般不超过10m。原则上,它可以工作 client-side,尽管您可能希望在服务器上执行坐标 -> 国家/地区查找。主要缺点是并非所有设备都具有 GPS 或 WiFi 位置,并且通常需要明确的用户同意。
- 查看服务器上的
Accept-Language
header(或在服务器的帮助下),并提取语言环境信息。使用瑞典 VPN 在意大利度假的美国人将注册为美国。
缺点是这是一个非常容易更改的设置。例如,世界各地的英语使用者可能更喜欢 en-US
设置以避免 machine-translated 文本。在现代浏览器上(写作时不是 IE/Edge,只有 Safari 11+),你也可以请求 navigator.languages.
navigator.language
是navigator.languages
header的第一个元素。 navigator.languages 的所有注意事项均适用。最重要的是,此信息有时可能只是没有任何语言环境的语言(即en
而不是en-US
)。使用另一个 third-party 服务。例如,如果用户通过 Facebook 连接等 Single-Sign-On 系统登录,您可以请求用户的家乡。此信息通常非常不可靠,需要第三方。
另一种选择可能是使用 (internationalization API)
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)