Mac OS X上的Node.js收到错误"原始http:// localhost不被Access-Control-Allow-Origin"

时间:2014-03-27 19:13:27

标签: jquery ajax node.js osx-mavericks

我最近买了我的第一台Apple Mac(运行Mavericks),我已经安装了node.js(其中我也是新手)。

我遇到了一个问题,希望有人能够给我一个简单的答案。我收到了错误......

Origin http://localhost is not allowed by Access-Control-Allow-Origin

我启动了apache服务器,创建了一个名为browser.html的小html文件并将其放在/ library / webserver / documents /

这允许我在http://localhost/browser.html

查看它

此html文件包含以下脚本...

$.ajax('http://127.0.0.1:8124/littletest.js', {
    success: function() {console.log('browser success')},
    error: function() {console.log('browser fail')}
});

然后我在与littletest.js相同的文件夹中创建了一个名为browser.html的文件(我以前在/ users / [我的mac的用户名] / test /中有它,但移动对问题没有影响)

littletest.js文件的内容是......

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello Node.js\n');
}).listen(8124, "127.0.0.1");

console.log('Server running at http://127.0.0.1:8124/');

通过转到终端中的此文件夹并输入节点littletest.js,脚本将启动。

但如上所述,当我浏览http://localhost/browser.html时,我收到了错误...

XMLHttpRequest cannot load http://127.0.0.1:8124/littletest.js. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

我知道可以通过将以下行添加到littletest.js文件...

来解决此问题
res.setHeader('Access-Control-Allow-Origin', 'http://localhost');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

......但是每次都必须这样做是不正常的,是吗?!

这是正常的吗? (因为在我读过的任何例子中,它通常都没有提及任何相关内容。)

还是我设置环境错了?请帮忙!

感谢您提供任何帮助,因为这一直困扰着我一段时间!

1 个答案:

答案 0 :(得分:1)

您在一个地方使用127.0.0.1:8124而在另一个地方使用localhost。您和我知道它们归同一个人所有,但它们看起来与浏览器不同,因此强制执行跨源访问策略。如果您只是对其中一个进行标准化(只要您保持一致,则无关紧要)问题应该得到解决。请注意,这意味着使用相同的域(127.0.0.1localhost)以及使用相同的端口。