我最近买了我的第一台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');
......但是每次都必须这样做是不正常的,是吗?!
这是正常的吗? (因为在我读过的任何例子中,它通常都没有提及任何相关内容。)
还是我设置环境错了?请帮忙!
感谢您提供任何帮助,因为这一直困扰着我一段时间!
答案 0 :(得分:1)
您在一个地方使用127.0.0.1:8124
而在另一个地方使用localhost
。您和我知道它们归同一个人所有,但它们看起来与浏览器不同,因此强制执行跨源访问策略。如果您只是对其中一个进行标准化(只要您保持一致,则无关紧要)问题应该得到解决。请注意,这意味着使用相同的域(127.0.0.1
或localhost
)以及使用相同的端口。