javascript - 通过 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