Почему я получаю причину: отсутствует заголовок CORS «Access-Control-Allow-Origin», когда данные возвращаются успешно - PullRequest
0 голосов
/ 04 декабря 2018

Я знаю, что этот вопрос задавался множество раз в SO, но эта проблема совершенно иная!

Поскольку Mozilla сам говорит о заголовке, вы должны установитьэто как показано ниже в nginX:

add_header 'Access-Control-Allow-Origin' 'origin-list'

Я установил параметры CORS, и интересная часть заключается в том, что preflight request завершается успешно:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,Content-Type,Accept,authorization,Expires,Pragma,x-custom-header
Access-Control-Allow-Methods: GET, POST, OPTIONS, PATCH
Access-Control-Allow-Origin: https://localhost:3000

enter image description here

Конечная точка /user.Теперь фактический запрос GET отправляется на сервер, и снова он успешно выполняется с 200 кодом ответа JSON ожидаемой полезной нагрузки!

enter image description here

Проблема заключается в той части, в которой я хочу получить эти данные из jQuery, как показано ниже:

$.ajax({
        type: "GET",
        url: url_endpoint,
        beforeSend: function(request) {
            request.setRequestHeader("Authorization", "Bearer " + _TOKEN);
        },
        dataType: "json",
        error: function (data, stat) { 
            console.log('got error data: ', stat);
            console.log(data);
        },
        complete: function(xhr, data) {
            console.log('here is the data...', data, xhr);
        }
    }).catch(function(data,x,y) {
        console.log(data,x,y,'it seems request has error!!!!');
    });

Он регистрирует ошибки в запросе, как внутри catch, и в консоли я вижу нижеошибка:

Блокировка перекрестного запроса: та же политика происхождения запрещает чтение удаленного ресурса в https://www.example.com/restapi/user. (причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).[Узнать больше]

Отображается, что заголовок отсутствует, а я объясняю, что заголовки возвращаются в OPTIONS.Чтобы убедиться, что эта ошибка относится к этому конкретному запросу, я закомментировал запрос /user и ошибка CORS исчезла.

Почему я получаю CORS, а ответ сервера 204 для OPTIONS и почему я получаюCORS при ответе json для /user

1 Ответ

0 голосов
/ 04 декабря 2018

Заголовки CORS должны также сопровождать ответ на GET, а не только ответ на OPTIONS.Например, вы отправляете их дважды (если есть предварительная проверка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...