Chrome 地理定位传感器破坏 CORS

Chrome Geolocation Sensors Breaking CORS

我有一个应用程序正在从地理位置 api 中提取 lat/lng 并对其余部分进行一些反向地理编码 api。

我曾经能够在开发者工具中使用 Chrome 传感器覆盖来测试不同的位置。但是,最近生成的 AJAX 调用已停止工作,我收到 CORS 错误,即使我知道其余 api 已正确设置 CORS header。事实上,当我将位置设置为 "No Override" 时,通话正常进行。

我设置了一个fiddle here来演示。它访问的 url 没有 CORS 设置(我找不到 public echo 设置),但可以看到行为。

观看网络标签。当"No Override"被选择chrome时,尝试直接获取请求。选择"London"时,Chrome发送OPTIONS请求,无论其余api是否配置CORS,该请求都会失败。显然,在 fiddle 中,所有这些都因为 api 而失败,但即使是正确配置的端点也会失败,并出现通常的 header 未设置错误。

这是一个错误还是我遗漏了什么?

$('button').on('click', function(e) {
  navigator.geolocation.getCurrentPosition(function(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    $.get('https://postman-echo.com/get?q=' + lat + ';' + lng, function(res) {
      console.log(res.body);
    });
  });
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>
  Click
</button>

当使用位置覆盖 CORS API 应该允许 header Accept-Language:

Access-Control-Allow-Headers: Accept-Language

为 Sami 上面的回复添加更多内容:

正在为纬度、经度、时区和区域设置应用浏览器传感器覆盖。语言环境覆盖导致浏览器请求 header 设置为 Accept-Language。

Accept-Language: mr_IN

因此,如果您只对位置感兴趣,则可以通过不设置语言环境覆盖来避免该错误。