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

时间:2019-10-24 18:48:19

标签: javascript http browser cors xmlhttprequest

我有一个网站可以从外部服务器(而不是服务器)访问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 个答案:

答案 0 :(得分:2)

CORS预检OPTIONS请求完全由浏览器控制-因此无法向其添加任何请求标头。参见https://fetch.spec.whatwg.org/#cors-preflight-fetch。因此,您向其发送请求的任何端点都必须配置为允许未经身份验证的OPTIONS请求,并使用200 OK响应它们-至少在您的请求触发预检之前(如果您可以添加任何自定义请求标头,例如问题中的x-api-key标头。