首页 > 解决方案 > 通过 https net::ERR_CONNECTION_CLOSED 将 SOCKET.IO-client (angular) 连接到 SOCKET.IO-server (node.js)

问题描述

我们的网站一直在内部测试机器上运行,网络内的所有计算机都可以访问它。

现在我们想在网络服务器 (Apache2) 上部署这个网站,以便我们的客户可以使用它。我们想使用 https,这就是我们遇到问题的地方。

Socket.io 客户端在切换到 https 后无法连接到 node.js 服务器。我们正在使用来自受信任 CA 的签名证书。我已经尝试了所有我能找到的解决方案,但似乎没有一个适合我们的案例。

与 ngx-socket-io 一起使用的构造函数:

constructor() {
    super({url: 'https://mywebPage.com:8080',options:{secure: true,  origin: '*', transport:['websocket']}})
}

我们的证书似乎是有效的,因为它适用于我们的角度页面。我们还能够向位于同一服务器上的 API 发出 HTTPS GET/POST 请求。

node.js socket.io 服务器代码:

var options = {
    key: fs.readFileSync('/etc/apache2/folder/certificate.com.key'),
    cert: fs.readFileSync('/etc/apache2/folder/certificate.com.public.crt'),
    ca: fs.readFileSync('/etc/apache2/folder/certificate-intermediate.crt'),
    requestCert: true
};
let server = require('https').createServer(options);  
let io = require('socket.io')(server);

server.listen(8080);
console.log("Server started on Port 8080");

客户端尝试连接到套接字服务器但失败并获得net::ERR_CONNECTION_CLOSED网页的其余部分加载正常并且具有有效的证书

我们还测试了 Web 服务器上的端口是否可以访问,并且它似乎在 netstat 和 nma 中是开放的。

如果需要更多信息,我很乐意提供。

编辑:已经在客户端测试了设置,rejectUnauthorized:false但这并没有改变错误。我在解决问题时考虑过的类似堆栈溢出问题:

socket.io net::ERR_CONNECTION_CLOSED

在 node.js 中使用 socket.io 设置服务器-服务器 SSL 通信

编辑 2:添加requestCert: false, rejectUnauthorized: false到我的 node.js 选项中。现在之前的错误已经解决了:

error during WebSocket handshake: Unexpected response code: 400

标签: javascriptnode.jstypescripthttpssocket.io

解决方案


推荐阅读