Socket.io Letsencrypt和安全连接在CORS上失败

时间:2019-04-27 14:44:15

标签: node.js sockets socket.io cors socket.io-1.0

我有一个简单的node.js安装程序,正在运行socket.io> 1.0.0;

fs = require('/home/node/bin/node_modules/file-system');

        // Options for socket.io > 1.0.0
        var options = {
                allowUpgrades: true,
                transports: [ 'polling', 'websocket' ],
                pingTimeout: 6000,
                pingInterval: 3000,
                cookie: 'nom-nom',
                httpCompression: true,
                key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
                cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem'),
                origins: '*:*'
        };

        io = require('/home/node/bin/node_modules/socket.io')(8000, options);

当客户端从通过http服务的页面进行连接时,他们能够按预期进行连接,并且允许套接字连接。如果客户端尝试通过https上的页面进行连接,则会出现以下错误;

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com:8000/socket.io/?EIO=3&transport=polling&t=MfVDWxD. (Reason: CORS request did not succeed).

鉴于我已经为*:*设置了CORS政策,该政策应该允许我不理解的原因导致失败。

我尝试将{secure: true}添加到客户端连接,并且还尝试对连接字符串强制使用wss://https://网址-所有这些都会导致相同的CORS错误。

这是一个简单的套接字实现,没有使用任何框架,例如express甚至http。

有人可以为我指出正确的方向,以便我可以允许我的客户通过https或理想的httphttps进行连接。

1 个答案:

答案 0 :(得分:0)

您需要安装cors,可以使用npm或任何其他软件包管理器来完成

然后在您的nodejs应用中:

// require cors
const cors = require("cors");
// Use Cors As Middleware
app.use(cors());