2016-04-29 19 views
3

我正在使用Eve和AngularJS中的API开发应用程序。 为了避免CORS问题,我做了一个简单的NodeJS服务器来服务我的静态文件。 然而,即使通过编写'X_DOMAINS': '*'(我使用Curl测试过,它工作)来允许我的Python Eve API上的所有域名后,当我想用​​$http调用API时,我在浏览器中发现了问题。CORS使用Eve和AngularJS的问题

这是我在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. 

我甚至在我的节点的应用程序写到这,即使我想这将是无用的:到目前为止

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

在你的响应头补充一点:

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,以便您可以对问题有更好的了解。

0

在以下命令中: res.header(“Access-Control-Allow-Headers”,“X-Requested-With,Content-Type”);

您设置了允许的标题,也许您发送了其他标题例如“授权”,在这种情况下,您必须将这些标头包含在上述命令中

3

用JavaScript处理一些类似的问题。我可以在前夜进行一些调整,但最终还是不够的。 BadRequest响应由容器引擎发送,而不是前夕,禁止任何javascript尝试处理错误。它似乎有一个很好的烧瓶延伸CORS覆盖得好:

from flask.ext.cors import CORS 
.... 
CORS(app) 

这是所有我需要在最后。