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
因此,如果您只对位置感兴趣,则可以通过不设置语言环境覆盖来避免该错误。
我有一个应用程序正在从地理位置 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
因此,如果您只对位置感兴趣,则可以通过不设置语言环境覆盖来避免该错误。