我正在使用Eve和AngularJS中的API开发应用程序。
为了避免CORS问题,我创建了一个简单的NodeJS服务器来提供我的静态文件。
但是,即使在我的Python Eve API上允许所有域编写'X_DOMAINS': '*'
之后(我使用Curl进行了测试并且它有效),当我想使用$http
调用API时,我的浏览器出现了问题。
这是我在chrome中遇到的错误:
XMLHttpRequest cannot load http://localhost:5000/regions. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
我甚至在我的Node应用程序中写了这个,尽管我认为它没用:
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
res.header("Access-Control-Allow-Methods", "GET, POST","PUT");
next();
});
到目前为止,没有任何工作,感谢您的帮助!
答案 0 :(得分:3)
使用javascript进入一些类似的问题。我可以在前夕进行一些调整,但最终还不够。 BadRequest响应由烧瓶引擎发送,而不是前夕,禁用任何javascript尝试处理错误。看起来有一个很好的烧瓶扩展CORS能很好地覆盖它:
PieEater
这就是我最终需要的一切。
答案 1 :(得分:0)
在您的回复标题中添加:
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
删除以下内容:
http://localhost:8080
或者您可以尝试获取请求来源并将其添加到响应中。像这样:
var hostName = req.get('host');
res.header("Access-Control-Allow-Origin", hostName);
在某些情况下它可能会起作用,特别是如果它是GET呼叫。但如果是POST,某些浏览器会阻止它。
另一种选择是禁用浏览器上的网络安全性(虽然不是最好的办法。)您可以阅读here。
同时浏览帖子here,以便您更好地了解问题。
答案 2 :(得分:0)
在以下命令中: res.header(“Access-Control-Allow-Headers”,“X-Requested-With,Content-Type”);
您设置了允许的标头,也许您发送了其他标头,例如“授权”,在这种情况下,您必须将这些标题包含在上面的命令
中