2

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

is调用onSuccess方法时,没有加载数据,consule显示如下错误

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

我在浏览器中测试了 nodejs 服务器,它运行良好。

我试图--disable-web-security在 chrome 中设置 , 标志,但它不起作用。

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

4

1 回答 1

6

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

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

  1. 您的脚本加载的 URI 的来源与脚本正在执行的页面的来源相同(localhost:81 和 localhost:3000 是相同的主机,但来源不同);
  2. 或者,如果您的浏览器支持它,则被请求页面的服务器包含一个 Access-Control-Allow-Origin 标头,该标头明确授权从相关来源提供的页面(或从所有来源提供的页面)向其发出 XMLHttpRequest。

尝试将 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' : '*'

});
于 2012-01-14T15:52:12.850 回答