是否可以向CORS飞行前请求添加请求标头?

问题描述 投票:0回答:1

我有一个网站可以从外部服务器(而不是服务器)访问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();
javascript http browser cors xmlhttprequest
1个回答
0
投票

CORS预检OPTIONS请求完全在浏览器的控制下-因此无法向其添加任何请求标头。详细信息在https://fetch.spec.whatwg.org/#cors-preflight-fetch。因此,必须将要发送请求的端点配置为接受未经身份验证的OPTIONS请求,并以200 OK成功响应对其进行响应-至少在您的请求触发预检之前(如果您添加任何自定义请求标头,例如问题中的x-api-key标头)。

© www.soinside.com 2019 - 2024. All rights reserved.