Chrome Датчики геолокации, выходящие из строя CORS - PullRequest
2 голосов
/ 16 июня 2020

У меня есть приложение, которое извлекает широту и долготу из api геолокации и выполняет обратное геокодирование для api отдыха. для тестирования различных локаций. Однако недавно результирующий вызов AJAX перестал работать, и я получаю ошибки CORS, хотя я знаю, что остальные api имеют правильные заголовки CORS. Фактически, когда я устанавливаю для местоположения значение «No Override», вызов работает как обычно.

Я установил скрипку здесь для демонстрации. URL-адрес, к которому он обращается, не имеет настройки CORS (я не смог найти publi c echo, который имел), но поведение можно увидеть.

Посмотрите вкладку сети. Когда выбрано «No Override», chrome пытается выполнить прямой запрос GET. Когда выбран «Лондон», Chrome отправляет запрос OPTIONS, этот запрос не выполняется, независимо от того, настроен ли остальной api для CORS или нет. Очевидно, что в скрипте все это не удается из-за api, но даже правильно настроенная конечная точка дает сбой с обычной ошибкой «заголовок не установлен».

Это ошибка или я чего-то упускаю?

$('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>

Ответы [ 2 ]

3 голосов
/ 14 августа 2020

Добавление дополнительных сведений к ответу Сами выше:

Переопределение датчика браузера применялось для широты, долготы, часового пояса и локали. Переопределение языкового стандарта вызывает установку заголовка запроса браузера для Accept-Language.

Accept-Language: mr_IN

В качестве альтернативы вы можете избежать ошибки, не задавая переопределение языкового стандарта, если вас интересует только местоположение.

1 голос
/ 16 июня 2020

При использовании переопределения местоположения CORS API должен разрешать заголовок Accept-Language:

Access-Control-Allow-Headers: Accept-Language
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...