enyo给了我一个“Access-Control-Allow-Origin不允许”,并且不会从nodejs服务器加载内容

时间:2012-01-14 15:30:58

标签: node.js xmlhttprequest enyo

我制作了简单的hello world NODEJS Server。 我有一个运行在chrome中的enyo web服务,试图访问http://localhost:3000

的NODEJS服务器

当调用onSuccess方法时,没有加载任何数据,并且消耗显示以下错误

XMLHttpRequest cannot load http://localhost:3000/. Origin http://localhost:81 is not allowed by Access-Control-Allow-Origin.

我在浏览器中测试了nodejs服务器,它工作正常。

我尝试在Chrome中设置--disable-web-security,标记,但它无效。

有人知道如何解决这个问题吗?如果NOD.js在另一台服务器上运行,它会起作用吗?这种安全性令人困惑。 泰德

1 个答案:

答案 0 :(得分:6)

出于安全原因,浏览器会限制脚本通过XMLHttpRequest发出的请求。

您的请求只会在以下两种情况下成功:

  1. 脚本加载的URI的来源与执行脚本的页面的原点相同(localhost:81和localhost:3000是相同的主机,但起源不同);
  2. 或者,如果您的浏览器支持它,则所请求页面的服务器包括一个Access-Control-Allow-Origin标头,该标头明确授权从相关来源(或从所有来源提供的页面)提供的页面使XMLHttpRequests它。
  3. 尝试将Accesss-Control-Allow-Origin标头添加到节点代码中生成响应的任何内容中,在某些代码中添加如下所示的标头:

    response.writeHead(200, {
                             'Content-Type': 'text/plain',
                             'Access-Control-Allow-Origin' : 'http://localhost:81'
    
                             //allow anything by replacing the above with
                             //'Access-Control-Allow-Origin' : '*'
    
    });