Socket.io 未设置 CORS 标头
Posted
技术标签:
【中文标题】Socket.io 未设置 CORS 标头【英文标题】:Socket.io doesn't set CORS header(s) 【发布时间】:2012-05-01 10:18:43 【问题描述】:我知道这个问题已经被问过几次了。 但是,我无法让任何这些解决方案发挥作用。 我正在运行 node.js 和 socket.io 的标准安装。 (来自 Amazon EC2 上的 yum) 问题是 Chrome 正在回退到 xhr 轮询,并且这些请求需要有效的 CORS 配置。但是,我似乎无法让它工作。我的 Web 服务器在端口 80 上运行,node.js(socket.io) 在端口 81 上运行。如您所见,我试图让 socket.io 使用源策略。我也尝试过使用“* : *”作为来源,但没有运气。 这是我的代码:
var http = require('http');
var io = require('socket.io').listen(81, origins: '*');
io.configure( function()
io.set('origin', '*');
);
io.set("origins","*");
var server = http.createServer(function(req, res)
io.sockets.emit("message", "test");
res.writeHead(200);
res.end('Hello Http');
console.log("Message recieved!");
);
server.listen(82);
io.sockets.on('connection', function(client)
console.log("New Connection");
);
非常感谢!
【问题讨论】:
【参考方案1】:这是我让 CORS 与 socket.io 一起工作所必须使用的语法:
io.set( 'origins', '*domain.com*:*' );
如果出现这种情况,请使用console.log
确保您在Manager.prototype.handleHandshake
内的./lib/manager.js
中输入此代码块:
if (origin)
// https://developer.mozilla.org/En/HTTP_Access_Control
headers['Access-Control-Allow-Origin'] = '*';
if (req.headers.cookie)
headers['Access-Control-Allow-Credentials'] = 'true';
【讨论】:
它没有工作......我目前正在考虑使用 sockjs 代替。不过还是谢谢啦! :D 但既然它对你有用,而且我认为我的安装和配置有误,我接受你的回答。 谢谢。如果您愿意,我仍然不介意与您一起调试。需要查看 HTTP 标头。 我多次查看 HTTP 标头,但 CORS 标头不存在。但我现在正在使用 sockjs,它就像一个魅力。非常感谢! 我建议将 '*domain.com*:*' 更改为 'domain.com:*' 以使其更安全。否则,您可以从“domain.com.example.com”、“anotherdomain.com”等域进行连接。以上是关于Socket.io 未设置 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章
由于 CORS 错误,Socket.io 和 express 应用程序无法连接:“'Access-Control-Allow-Origin' 标头的值不能是通配符 '*'”
NestJs Socket io 适配器:如果使用 false 调用 allowFunction,服务器不会将 CORS 标头添加到握手的响应中。错误或配置错误?
Socket.io Express Http-Server 后端,CORS 错误