已配置服务器CORS仍遇Socket.io跨域错误,新手求助
Socket.io跨域错误原因及解决方法
你的问题出在Socket.io的CORS配置格式错误——你把origin、methods这些CORS相关参数直接放在了Socket.io的初始化配置对象里,但Socket.io要求这些参数必须嵌套在cors子对象中,否则不会生效,导致浏览器检测不到Access-Control-Allow-Origin响应头,触发跨域错误。
另外你虽然引入了cors模块,但并没有在HTTP服务器上使用它,不过其实Socket.io自身已经集成了CORS处理能力,不需要额外依赖这个模块。
修改后的服务器代码
const http = require('http'); const socketio = require('socket.io'); // 创建HTTP服务器 const server = http.createServer((req, res) => { res.end("I am connected"); }); // 正确配置Socket.io的CORS参数 const io = socketio(server, { cors: { // 关键:所有CORS参数放在cors对象内 origin: "https://localhost:4200", methods: ["GET", "POST"], allowedHeaders: ["content-type"] } }); io.on('connection', (socket, req) => { socket.emit('banner','Welcome to the socket io server'); socket.on('message', (msg) => { console.log(msg); }); }); server.listen(8000);
额外说明
客户端代码不需要改动,但注意你的客户端运行在HTTPS环境,连接的是HTTP的Socket.io服务器,部分浏览器会弹出混合内容的警告,开发环境下可以暂时忽略,生产环境建议把Socket.io服务器也配置成HTTPS。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

