Запрос на выборку не работает

#javascript #fetch-api

#javascript #fetch-api

Вопрос:

Я пытаюсь добавить пользовательский заголовок, X-Query-Key , к HTTP-запросу, используя Fetch API или request, но когда я добавляю это в заголовок запроса, кажется, что он не устанавливает заголовки, и Request Method OPTIONS по какой-то причине установлено значение is.

Когда я удаляю заголовок, он возвращается к тому GET , что он должен делать.

Пример кода выглядит следующим образом:

    const options = {
    url: url,
    headers: {
      'Accept': 'application/json',
      'X-Query-Key': '123456' //Adding this breaks the request
    }
  };

  return request(options, (err, res, body) => {
    console.log(body);
  });
  

Комментарии:

1. Звучит как CORS.

Ответ №1:

Попробуйте это:

 const headers = new Headers({
  "Accept": "application/json",
  "X-Query-Key": "123456",
});

const options = {
  url: url,
  headers: headers
};

return request(options, (err, res, body) => {
  console.log(body);
});
  

Если это не решает проблему, это может быть связано с CORS.

Комментарии:

1. Спасибо — Это сработало, думаю, я пропустил Headers — Теперь я получаю проблему CORS, которая является моей следующей проблемой: D

2. Я думаю, это потому, что вам нужно вызвать конструктор, чтобы создать свои собственные заголовки. Эй, по крайней мере, fetch API значительно упрощает обработку CORS. Реальная проблема с новым fetch API заключается в том, что запрос на выборку не может быть прерван . выборка имеет свое применение для сервисных работников, но на практике я обнаружил, что все еще использую XHR2 везде.

Ответ №2:

Пользовательские заголовки в запросах с перекрестным источником должны поддерживаться сервером, с которого запрашивается ресурс. Сервер в этом примере должен быть настроен на прием заголовка X-Custom-Header для успешной выборки. Когда задан пользовательский заголовок, браузер выполняет предполетную проверку. Это означает, что браузер сначала отправляет запрос параметров на сервер, чтобы определить, какие HTTP-методы и заголовки разрешены сервером. Если сервер настроен на прием метода и заголовков исходного запроса, то он отправляется. В противном случае выдается ошибка.

Таким образом, у вас будет 2 запроса, если вы используете пользовательские заголовки, первый с параметрами метода, чтобы проверить, разрешает ли сервер пользовательские заголовки, и после этого, если ответ сервера равен 200 OK и разрешает ваш исходный запрос, второй будет отправлен

Работа с API выборки