【发布时间】:2013-01-03 23:30:32
【问题描述】:
我有一个可以工作的 node.js Express 服务器,我想添加 socket.io 支持(允许 javascript 客户端通过 socket.io 连接)。我可以通过 Javascript $.get() 连接到 express 服务器,但由于 CORS 错误,socket.io.connect() 命令失败。
我的测试机器是带有 Apache 的 OSX 为客户端提供服务,因此占用了 80 端口,所以我在 8888 端口上运行了 node.js/express。我根据文档添加了 socket.io:
var exp = express();
var server = require('http').createServer(api.server);
exp.listen(8888);
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
console.log('connection');
});
我在 node.js 日志中正确地看到“信息:socket.io 已启动”。
然后,在客户端,我尝试连接到服务器...
this.socket = io.connect('http://localhost:8888');
this.socket.on('connect',function() {
socket.emit('install','test');
});
但是,我在 Chrome 的控制台中遇到了 CORS 错误:
XMLHttpRequest cannot load http://localhost:8888/socket.io/1/?t=1358715637192. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
但是,这很好用!
$.get('http://localhost:8888',function(e,d){
console.log(e,d);
});
所以我仔细检查了 localhost:8888 和 localhost 的标头——两者都正确返回了(应该)允许跨域请求的标头...
访问控制允许来源:*
有什么想法吗?
【问题讨论】:
-
我面临着完全相同的问题,这让我发疯了!你能找到任何解决方案吗?
-
不 :( 我不知道是什么原因造成的。我最好的猜测是与端口有关。