【发布时间】:2018-10-16 16:18:05
【问题描述】:
运行我的项目时出现以下错误。
加载失败 https://us-centralx-xxx.cloudfunctions.net/xxx: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:3000” 使用权。响应的 HTTP 状态代码为 500。
在阅读了很多SO帖子后,我找到了以下解决方案,我需要在其中添加Access-Control-Allow-Origin、Access-Control-Allow-Methods和Access-Control-Allow-Headers
const HEADERS = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': 'http://localhost:3000/',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'X-Requested-With,content-type'
};
但是,错误仍然存在。我该如何解决这个问题?
更新
exports.uploadFile = functions.https.onRequest((req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,DELETE,HEAD,PUT,OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.status(200).json({
message: req.body
});
});
【问题讨论】:
-
这个问题与后端服务器有关,当您发送飞行前请求时,服务器应该允许带有标头的请求和响应。在您的
nodejs标头中,您需要允许http://localhost:3000 orgin获得访问权限。 -
这个 CORS 错误非常具有误导性。当客户端错误地将函数调用到该函数甚至不存在的不同区域时,我遇到了这个问题。一旦客户端指向正确的区域,就不会再出现 CORS 问题。我们不必按照您的问题和其他答案的建议对任何
res.setHeader()进行编码。