即使我在服务器上允许它,Socket.io 也会出现 CORS 错误

新手上路,请多包涵

我的节点服务器和客户端运行在不同的端口(分别为 3001、5347)上。在我使用过的客户端上,

 var socket = io('http://127.0.0.1:3001');

在服务器上我一一尝试了所有

    1) io.set('origins', '*:*');
    2) io.set('origins', 'http://127.0.0.1:5347');
    3) io.set('origins', '*');
    4) io.set('origins', '127.0.0.1:5347');

但我收到以下错误:

XMLHttpRequest 无法加载 http://127.0.0.1:3001/socket.io/?EIO=3&transport=polling&t=1456799439856-4590 。当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。因此,Origin ‘null’ 不允许访问。

注意:我在服务器上使用 express 并且我已经通过以下方式使用 cors 中间件:

 app.use(cors());

其中 app 和 cors 分别是 express 和 cors 的实例。

原文由 Akhilesh Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 653
2 个回答

如果运行 Express 如下:

 var app = express();
var server = app.listen(3000);

因此,要启动 socket.io,我们可以执行以下操作:

 var io = require('socket.io').listen(server);

问题是由于以下代码:

 var http = require('http').Server(app);
var io = require('socket.io')(http);

传递给 socket.io 的服务器对象与我正在监听的服务器对象不同。

原文由 Akhilesh Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

接受的答案已过时

根据官方文档,您可以将其添加到现有的 http 服务器 https://socket.io/docs/server-initialization/#Attached-to-an-existing-HTTP-server

 const server = require('http').createServer();
const options = { /* ... */ };
const io = require('socket.io')(server, options);
io.on('connection', socket => { /* ... */ });
server.listen(3000);

使用此选项对象启用 cors 似乎可以解决问题

options={
 cors:true,
 origins:["http://127.0.0.1:5347"],
}

原文由 Shree Charan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题