getCurrentPosition在VPN后面失败 - 为什么?

时间:2015-04-18 19:54:07

标签: javascript geolocation vpn

我之前提出的问题:https://stackoverflow.com/questions/29581698/getcurrentposition-fails-behind-vpn已被关闭,因为"不清楚"。指示说我应该重新提出这个问题,但是这样做了,问题仍然关闭。因此,我在问题上打开了一个新问题。

我使用AirVpn.org,并注意到虽然活动,地理定位失败:如果我关闭VPN客户端,下面的代码显示'工作',打开它,我得到'当前的位置无法确定'。

if (!navigator.geolocation) {
  alert('No navigator');
} else navigator.geolocation.getCurrentPosition(
      function() { alert('works'); },
      function(e) { alert(e.message); }, {
      timeout: 30000, 
      enableHighAccuracy: true, 
      maximumAge: 75000
    });

我要问的是,当通过VPN连接到互联网时,地理定位器的当前位置请求失败的原因是什么?具体来说,我有兴趣知道navigator.geolocation软件用于确定位置的机制以及该机制在VPN条件下可能无法工作的原因

1 个答案:

答案 0 :(得分:3)

浏览器如何确定您的位置有多种方式。如果您的设备上没有像GPS这样的位置传感器,则会出现一些回退。其中主要是附近的WiFi热点的地理定位,如果失败,则基于IP的位置。这两者都需要有效的互联网连接,因为他们将WiFi标识符和/或IP发送到服务器,并将它们解析为可能的位置。据我所知,他们还需要工作TLS(端口443),所以如果您的VPN正在剥离HTTPS,您可能无法获取您的位置,因为您无法得到关于&#34的回复?我基于我能收到的WiFi"。

然而,更可能的是,除其他外,VPN会屏蔽您的IP地址。所以,如果你的工作"地理定位仅基于IP地址,在VPN上会失败。您可以通过非常低的准确度(通常为数十公里)来确定您的位置是基于IP的,而WiFi位置通常为数十或数百米。这些地理定位服务非常智能,因此他们可能拥有VPN地址"黑名单"并将他们的IP解析为" unknown"。

我发生的另一种可能性可能是您的IP和WiFi位置不匹配,导致模糊状态再次导致"未知"。

我的资金将来自于您只使用纯IP位置且地理位置服务无法或不想解决您的屏蔽问题"地址。