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