Почему добавляется дополнительный заголовок, который приводит к сбою вызова AJAX

AJAX вызов:

$.ajax({
    url: "http://myserver2:296/api/Demo/HelloWorld",
    type: "GET",
    dataType: 'JSONP',
    jsonp: "callback",
    headers: { 'API_KEY': 'mykey09090' },
    success: function (result) {
        console.log(result);
    },
    error: ajaxFailed
});

function ajaxFailed(xmlRequest) {
    alert(xmlRequest.status + ' \n\r ' +
          xmlRequest.statusText + '\n\r' +
          xmlRequest.responseText);
}

Я получаю следующую ошибку: Failed to load resource: the server responded with a status of 403 (Forbidden). Однако, когда я использую Postman, мне просто нужно добавить заголовки с адресом http://myserver2:296/api/Demo/HelloWorld, который возвращает строку.

Могу ли я получить некоторую помощь для решения проблемы.

Моя цель - предоставить исходный сервер вместе с ключом API правильно предоставленным для возврата данных из веб-Api.

Ответы

Ответ 1

Добавление заголовка API_KEY в запрос запускает ваш браузер, чтобы сначала отправить запрос OPTIONS перед запросом CORS. Любые заголовки, которые вы добавляете к запросу, отличному от заголовков, определяемых как заголовки запросов с поддержкой CORS, запустит ваш браузер для отправки запроса OPORS перед отправкой.

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

Причина, по которой вы не получаете это от Postman, заключается в том, что в отличие от браузеров, Postman не реализует CORS, поэтому он не отправляет запрос OPTIONS. (Почтальон не работает в рамках модели Web-безопасности того же происхождения, которую браузеры применяют для веб-приложений.)

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