我们的网站使用HTML5 fetch API来调用我们的后端NodeJS服务以执行某些操作。我们的后端驻留在与主网站不同的域上,因此我们在Node应用程序上启用了CORS。这适用于99%的客户。
然而,一位客户遇到了问题。他们试图从他们的工作场所访问我们的网站(也许他们的工作场所网络有更高的安全设置......?)他们会收到以下错误:
api.our-node-backend.com/blah无法加载资源:服务器 回复状态为403(Forbidden)的书:1 Fetch API不能 加载https://api.our-node-backend.com/blah。对预检请求的响应 没有通过访问控制检查:否'访问控制 - 允许 - 来源' 标头出现在请求的资源上。起源 ' https://www.our-frontend-website.com'因此是不允许的 访问。响应具有HTTP状态代码403.如果是不透明的响应 满足您的需求,将请求模式设置为“无人”状态。去取 CORS禁用的资源。
我们的Node应用程序目前配置如下:
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
// respond to options pre-flight
app.options('*', function(req, res) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.status(200).send();
});
此配置有问题吗?堆栈溢出的其他示例将Access-Control-Allow-Headers设置为" Origin,X-Requested-With,Content-Type,Accept"而不只是" Content-Type"。这有什么不同?