javascript - 是否可以向 CORS 预检请求添加请求标头?
问题描述
XmlHttpRequest
我有一个网站,它通过普通的(见下文)从外部服务器(而不是为网站提供服务的服务器)访问 API 。该 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
请求,并使用 a 响应它们200 OK
(至少只要请求触发预检,如果您添加自定义请求标头,例如标头,它将始终x-api-key
如此在问题中)。
推荐阅读
- mongodb - 解析 mongo 集合时出现问题,该集合在 spark 中的模式很少
- xaml - 如何使用“资源系统”根据分辨率缩放在 UWP XAML 应用程序中缩放字体
- javascript - 检查对象javascript中的值是否为字符串
- java - Java将文件读入列表
- python - 按字典python列表中的值总和排序
- android - 表格视图推到屏幕顶部
- java - Hashmap方法求和
- reactjs - 我如何知道 redux 商店何时更新
- c# - 如何根据 Razor 页面的主表中的项目 ID 检索子表的项目?
- javascript - 通过 Ajax POST 方法发送 FormData 返回 403