#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, которая является моей следующей проблемой: D2. Я думаю, это потому, что вам нужно вызвать конструктор, чтобы создать свои собственные заголовки. Эй, по крайней мере, fetch API значительно упрощает обработку CORS. Реальная проблема с новым fetch API заключается в том, что запрос на выборку не может быть прерван . выборка имеет свое применение для сервисных работников, но на практике я обнаружил, что все еще использую XHR2 везде.
Ответ №2:
Пользовательские заголовки в запросах с перекрестным источником должны поддерживаться сервером, с которого запрашивается ресурс. Сервер в этом примере должен быть настроен на прием заголовка X-Custom-Header для успешной выборки. Когда задан пользовательский заголовок, браузер выполняет предполетную проверку. Это означает, что браузер сначала отправляет запрос параметров на сервер, чтобы определить, какие HTTP-методы и заголовки разрешены сервером. Если сервер настроен на прием метода и заголовков исходного запроса, то он отправляется. В противном случае выдается ошибка.
Таким образом, у вас будет 2 запроса, если вы используете пользовательские заголовки, первый с параметрами метода, чтобы проверить, разрешает ли сервер пользовательские заголовки, и после этого, если ответ сервера равен 200 OK и разрешает ваш исходный запрос, второй будет отправлен