我得到No 'Access-Control-Allow-Origin'头,当尝试调用API时



编辑:可能值得注意的是,我是在GoDaddy注册的域名,该域名将屏蔽转发到我的Bitnami IP。我的堆栈都在同一个服务器上,这就是为什么我不明白这个问题的跨站点性质。或许我理解错了。

我知道有其他类似的线程,但我没有看到任何匹配我的确切设置。

我有一个Amazon AWS EC2 Bitnami MEAN堆栈运行AngularJS站点。我发布了一些信息,我收集了一些Python脚本到mongodb外部,然后我有一个JS API,通过端口3000成功发布集合…据我所知,都很标准。我刚刚学习这项技术,还是个新手。

所以当我去API [URL]:3000/API 在Chrome我看到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.

抱歉所有的假url,我是新的stackoverflow,它标记我使用"超过2个url",因为我没有10点。

提前感谢您帮我理解这个问题

这个错误的原因很简单,你正在调用一个单独的API域,而不是你的angular应用程序的服务域。Chrome或其他浏览器通常会抛出CORS错误。

你要做的就是打开你的API,把angular应用运行的域名列入白名单。我不确定它是如何在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');
});

相关内容

  • 没有找到相关文章

最新更新