【问题标题】:Unexpected Access-Control-Allow-Origin error意外的访问控制允许来源错误
【发布时间】:2013-10-21 20:19:18
【问题描述】:

我正在从这里学习一个简单的教程:

http://addyosmani.github.io/backbone-fundamentals/

我有一个 node.js 服务器在 localhost 端口 4711 上运行

我有一个在端口 8082 上运行的 tomcat 和一个作为客户端的主干.js 应用程序,该应用程序在该服务器上以 index.html 启动。

但我明白了:

XMLHttpRequest 无法加载... api/books。来源 localhost:8082 不是 Access-Control-Allow-Origin 允许。

1) 为什么?这不是基于文件的访问 - 实际上普通的网络浏览器会看到

http://localhost:4711/ 和交互就好了。

2) 解决方法是什么?(鉴于此堆栈的一部分是 node.js 服务器)

【问题讨论】:

  • 将 Access-Control-Allow-Origin 的标头值传递为 '*'

标签: javascript backbone.js cors


【解决方案1】:

您正在发起一个CORS 请求,因为两台服务器正在侦听不同的端口(localhost:8082 上的 index.html 和 localhost:4711 上的节点服务器)

在您节点的 http 服务器中,尝试将 Access-Control-Allow-Origin 标头设置为 *Origin 标头。

http.createServer(function(req, res) {
    res.header('Access-Control-Allow-Origin', req.headers['origin']);
    //handle
});

【讨论】:

  • 感谢您的快速回答。那么这是使用 node.js 时的标准做法吗? (因为每个 node.js 都会有自己的端口号。)或者我可以以某种方式说服我的 Tomcat 服务器从 node.js 提供数据?
  • 当您需要向不同于原始域的域执行 Ajax 请求时,您可以使用CORS。这不是特定于 node.js 的,也可以在任何其他服务器上使用。
  • 我在这里有点困惑。我是否需要同时更改客户端和服务器(节点 js)代码,或者只能从一侧完成。对于 Backbone 客户端和 Node.js 服务器,是否有任何人可以指出我的明确答案。
  • 我发现这个答案是最有用的。这允许从 NODE.js 端做所有事情。还有其他方法在客户端使用可怕的 jquery magix - 我会避免这些! stackoverflow.com/questions/16046364/…
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 2017-01-10
  • 2017-11-21
  • 2019-07-09
相关资源
最近更新 更多