是否可以将请求标头添加到 CORS 预检请求?



我有一个从外部服务器(不是服务器)访问 API 的网站 为网站提供服务)通过普通XmlHttpRequest(见下文)。该接口 需要用于访问服务的 API 密钥添加为请求标头。 但是,由于这些是 CORS 请求浏览器首先执行预检请求以检查该服务器是否 支持CORS。现在,服务器似乎也希望在 这些由浏览器完成的预检请求。是否有可能通过 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标头,则始终会触发预检)。

最新更新