我在尝试调用 API 时收到 No 'Access-Control-Allow-Origin' header

I am getting No 'Access-Control-Allow-Origin' header when trying to call an API

编辑:可能值得注意的是,我在 GoDaddy 注册了域,它通过屏蔽转发到我的 Bitnami IP。我的堆栈都在同一台服务器上,这就是为什么我不了解此问题的跨站点性质。或者也许我理解错了。请帮助我理解这个错误。

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

我有一个 Amazon AWS EC2 Bitnami MEAN 堆栈 运行 一个 AngularJS 站点。我正在将一些我通过一些 Python 脚本从外部收集的信息发布到 mongodb 中,然后我有一个 JS API 通过端口 3000 成功发布了 collection ... 全部据我所知非常标准。刚学这门技术,小菜一碟

所以当我转到 API [URL]:3000/api 时,我看到 Chrome JSON 结果。这不是问题。

当我的 Angular 站点的控制器尝试在 API URL 上执行 $http GET 时,Express 记录并在我的 putty 控制台中向 Bitnami 显示我确实正在点击API.

但是.. Chrome 在我 F12 调试时在页面上给我这个甜蜜的错误:

XMLHttpRequest cannot load **URL**. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin **URL**' is therefore not allowed access.

抱歉所有假 URLs,我是 Whosebug 的新手,它标记我使用 "more than 2 URLs" 因为我没有 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');
});