Chrome: запрос GET отменен для запроса CORS HTTPS

Я пытаюсь сделать запрос AJAX для загрузки файла JSON с S3, используя следующий код:

$.ajax({
    'type':'GET',
    'url':this.baseUrl + publicationId + "/document.json",
    'crossDomain': true,
    'dataType':'json',
    'success':function(data) {
        console.log('got document.json');
    }
});

Это отлично работает в Firefox и работает, если baseUrl равен http://‹s3-url›, но если это https://, то Chrome отменяет запрос с ошибкой:

XMLHttpRequest не может загрузить https://s3.amazonaws.com/‹bucket-name›/‹pub-id›/document.json. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, источник «https://localhost.office.lucidpress.com» не имеет доступа.

Выполнение того же запроса с помощью CURL имеет следующий заголовок: «Access-Control-Allow-Origin: *».

Почему это не работает для Chrome и есть ли обходной путь?

Примечание. Я добавляю пробелы в URL-адреса, чтобы они не становились ссылками.


person Thayne    schedule 01.07.2014    source источник


Ответы (1)


Chrome отправит предварительный запрос OPTIONS, чтобы узнать, можно ли выполнить GET. Какие заголовки вы получите, если вы curl -X OPTIONS -i https://s3.amazonaws.com/<bucket-name>/<pub-id>/document.json? Скорее всего, вам нужно добавить Access-Control-Allow-Headers к ответу вашего сервера, чтобы также разрешить любые дополнительные заголовки, которые Chrome может отправлять по запросу OPTIONS, то есть Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept

В качестве альтернативы, поскольку это запрос https, ваш ответ может быть Почему Chrome отменяет запрос CORS OPTION< /а>

person Ross Taylor-Turner    schedule 02.07.2014
comment
Похоже, это, наверное, оно. S3 выдает 403 для запроса OPTIONS. - person Thayne; 02.07.2014