编辑:可能值得注意的是,我在GoDaddy域名注册,并通过屏蔽转发到我的Bitnami IP。我的堆栈都在同一台服务器上,这就是为什么我不理解这个问题的跨站点性质。或许我理解错了。请帮我理解这个错误。
我知道还有其他类似的线程,但我没有看到任何匹配的确切设置。
我有运行AngularJS网站的Amazon AWS EC2 Bitnami MEAN堆栈。我发布了一些外部用一些Python脚本收集到mongodb中的信息,然后我有一个JS API,通过端口3000成功发布了这个集合......所有这些都是我能说的标准。我只是学习这项技术而且非常新手。
因此,当我在Chrome中使用API [URL]:3000 / api 时,我会看到JSON结果。这不是问题。
当我的Angular站点的控制器尝试在API URL上执行$ http GET时,Express会在我的putty控制台中记录并显示到Bitnami,我确实正在使用API。
但是。当我进行F12调试时,Chrome在页面上给出了这个甜蜜的错误:
XMLHttpRequest cannot load **URL**. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin **URL**' is therefore not allowed access.
对于所有虚假网址,我不熟悉stackoverflow,它标记为使用“超过2个网址”,因为我没有10分。
非常感谢您提前帮助我理解这个问题。
答案 0 :(得分:1)
出现此错误的原因很简单,您正在将API调用作为与您的角度应用程序提供的域分开的域。 Chrome或任何其他浏览器通常会抛出CORS错误。
您需要做的是转到您的API并将运行角度应用程序的域列入白名单。我不确定它是如何在python中完成的,但在下面的NodeJS中我会做的。
var cors = require('cors');
corsOptions = {
origin: [
'http://www.127.0.0.1:5555',
'http://www.any-other-site-to-access.com'
],
credentials: true
};
app.use(cors(corsOptions));
对于python,这可能会有所帮助,但不确定 http://enable-cors.org/server_appengine.html
从CORS的文档中,启用所有CORS
var express = require('express')
, cors = require('cors')
, app = express();
app.use(cors());
app.get('/products/:id', function(req, res, next){
res.json({msg: 'This is CORS-enabled for all origins!'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});