为什么在socket.io中使用cors?

时间:2018-02-06 04:38:04

标签: socket.io cors

似乎cors中间件是使用socketio聊天应用程序的先决条件。
但老实说,我无法理解我们使用cors的原因。

const io = require('socket.io')(server)

我的服务器在localhost:3000上运行,而io依赖于我的服务器。因此两者的域名与localhost:3000相同。但是为什么需要这些人呢? 可能会有一些解释。

2 个答案:

答案 0 :(得分:1)

Chrome不支持localhost and there's a bug上有关此问题的CORS请求,该问题已标记为WontFix。他们建议您在开发期间使用this chrome extension暂时禁用CORS。因此,您可以在生产中忘记删除socket.io上的CORS中间件,而不是在生产中删除它,而是可以使用chrome扩展进行localhost测试。

答案 1 :(得分:1)

如果您的socket.io服务器与包含网页的Web服务器所在的主机和端口相同,那么您根本不需要COR。

仅在需要向其他域或端口发出http请求时才需要COR。此外,如果你将socket.io限制为只使用webSocket传输,而不是以http轮询开始的小初始化例程,那么你甚至不需要CORS来做跨越socket.io。

因此,总而言之,只有当你的socket.io服务器与创建连接的网页不同的主机或端口时,socket.io才需要CORs,即使你关闭了http,你也可以避免使用COR轮询传输,以便socket.io仅使用webSocket作为传输。