Можно ли добавить заголовок запроса к предварительному запросу CORS? - PullRequest
1 голос
/ 24 октября 2019

У меня есть веб-сайт, который обращается к API с внешнего сервера (не сервера, который обслуживает веб-сайт) через обычный XmlHttpRequest (см. Ниже). Для этого API требуется ключ API для доступа к службе, который будет добавлен в качестве заголовка запроса. Однако, поскольку это CORS запросов, браузер сначала выполняет предварительный запрос, чтобы проверить, поддерживает ли этот сервер CORS. Теперь кажется, что сервер также хочет видеть ключ API в этих предварительных запросах, выполняемых браузером. Можно ли передать ключ API также на предпечатный запрос?

const req = new XMLHttpRequest();
req.open("GET", "https://some/api/endpoint");
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
req.setRequestHeader("x-api-key", _apiKey);
req.onload = () => {
  // ...
};
req.send();

1 Ответ

2 голосов
/ 25 октября 2019

Запрос CORS preflight OPTIONS полностью контролируется браузером - поэтому добавить в него заголовки запроса невозможно. См. https://fetch.spec.whatwg.org/#cors-preflight-fetch.. Поэтому любая конечная точка, на которую вы отправляете запрос, должна быть настроена так, чтобы разрешать неаутентифицированные запросы OPTIONS и отвечать на них 200 OK - по крайней мере, пока ваш запрос запускает предпечатную проверку (которую онавсегда будет, если вы добавите какие-либо пользовательские заголовки запроса, такие как заголовок x-api-key в вопросе).

...