Safari 10.1: XMLHttpRequest с параметрами запроса не может загружаться из-за проверки контроля доступа

При попытке запроса CORS на Safari 10.1 на URL-адрес, который включает параметры запроса (например, https://example.com/api?v=1), Safari говорит

XMLHttpRequest не может загрузить из-за проверки контроля доступа

Chrome/Firefox работают нормально.

При запросах со страницы без "? v = 1" Safari тоже отлично работает.

Я попытался изменить заголовок ответа сервера из

Access-Control-Allow-Origin: https://example.com

к

Access-Control-Allow-Origin: https://example.com/api?v=1

но это нарушает Chrome.

Любые предложения?

Ответы

Ответ 1

Вы сталкиваетесь с проблемами CORS.

Некоторые возможные причины:

  • Заголовок Access-Control-Allow-Origin может быть установлен только на стороне сервера, а не в вашем клиентском скрипте. (Вы не дали понять, что сделали это правильно.)
  • Вы уверены, что протокол (http против https против, возможно, даже file) точно такой же?
  • Если у вас может быть несколько поддоменов, вам необходимо настроить конфигурацию (например, Apache) на что-то вроде "^http(s)?://(.+\.)?test\.com$.
    ^ Отмечает начало строки, чтобы предотвратить что-либо предшествующее этому URL. Вам нужен протокол и разрешить оба здесь. Субдомен не является обязательным. И $ отмечает конец строки (вам не нужно устанавливать подстраницы, потому что источник только на основе хоста).
  • Как указано здесь, добавление Access-Control-Allow-Headers: Origin к конфигурации сервера также может быть решением. Попробуйте сравнить фактические запросы, сделанные моим Safari, с успешными запросами, выполненными Firefox или Chrome, чтобы определить возможные недостающие заголовки (и, возможно, сравнить их с конфигурацией вашего сервера).

Ответ 2

Попытка следовать может работать -

Access-Control-Allow-Origin: <origin> | *

Ответ 3

Если кто-то сталкивался с этой ошибкой, это произошло в приложении, которое я создавал. В моем случае это был трейлинг/в URI, который вызвал ответ 301, который по некоторым причинам был интерпретирован Safari как ответ 500.