我有一个网站可以从外部服务器(而不是服务器)访问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();
答案 0 :(得分:2)
CORS预检OPTIONS
请求完全由浏览器控制-因此无法向其添加任何请求标头。参见https://fetch.spec.whatwg.org/#cors-preflight-fetch。因此,您向其发送请求的任何端点都必须配置为允许未经身份验证的OPTIONS
请求,并使用200 OK
响应它们-至少在您的请求触发预检之前(如果您可以添加任何自定义请求标头,例如问题中的x-api-key
标头。