Не удается отправить заголовки ajax из сценария js

Я построил API. Он слушает в порту 8000, и мое приложение прослушивает порт 3000.

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://localhost:8000/communities",
  "method": "GET",
  "headers": {
    "authorization": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiWVx1MDBlMWJpciIsImFkbWluIjp0cnVlfQ.xtvKyxq26b7K02mVv21vkt7PbeOUatMbgxLOHIj7CQg",
    "cache-control": "no-cache",
  }
}

$(document).ready(function(){
    $.ajax(settings).done(function (response) {
    console.log(response);
    });
});

Я знаю, что это не проблема какой-то настройки, потому что деактивация токена auth в сервере я получаю данные. Этот код был сгенерирован из приложения PostMan chrome, но при выполнении запроса из моего файла js я получаю ошибку 401, и с сервера я вижуauthorization, что заголовок не был установлен. В чем может быть проблема?

В консоли chrome появится:

Failed to load resource: the server responded with a status of 401 (Unauthorized)

Заголовки, полученные сервером от localhost: 3000

{'ACCEPT': '*/*', 'ACCESS-CONTROL-REQUEST-METHOD': 'GET', 'CONNECTION': 'keep-alive', 'ACCEPT-ENCODING': 'gzip, deflate, sdch, br', 'HOST': 'localhost:8000', 'REFERER': 'http://localhost:3000/', 'USER-AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36', 'ORIGIN': 'http://localhost:3000', 'ACCESS-CONTROL-REQUEST-HEADERS': 'authorization, cache-control, 'ACCEPT-LANGUAGE': 'es-ES,es;q=0.8'}

И от почтальона

{'AUTHORIZATION': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiWVx1MDBlMWJpciIsImFkbWluIjp0cnVlfQ.xtvKyxq26b7K02mVv21vkt7PbeOUatMbgxLOHIj7CQg', 'ACCEPT': '*/*', 'CACHE-CONTROL': 'no-cache', 'POSTMAN-TOKEN': '06aba643-b6cb-3a7a-9e6e-61b1f2d9e94e', 'CONNECTION': 'keep-alive', 'ACCEPT-ENCODING': 'gzip, deflate, sdch, br', 'HOST': 'localhost:8000', 'USER-AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36', 'ACCEPT-LANGUAGE': 'es-ES,es;q=0.8'}

PD: также установка сервера позволяет CORS.

1 ответ

  1. Он принимает как GET, так и POST. В этом случае я пытаюсь получить

    Так как вы не делаете простой запрос (вы добавляете заголовки HTTP), браузер делает запрос параметров preflight, чтобы запросить разрешение на выполнение запроса GET с дополнительными заголовками запроса.

    Сервер отклоняет запрос опций как неавторизованный, а браузер отказывается сделать запрос GET.

    Для обработки запроса параметров необходимо написать код на стороне сервера.