socket.io连接出现net::ERR_SSL_PROTOCOL_ERROR错误求助
解决socket.io连接时的net::ERR_SSL_PROTOCOL_ERROR错误
这个错误的核心是客户端尝试通过HTTPS/WSS加密协议连接,但服务端仅搭建了HTTP/WS非加密服务器,协议不匹配导致SSL握手失败。
解决方案一:服务端启用HTTPS/WSS(生产环境推荐)
先准备好SSL证书(可通过Let's Encrypt免费获取),修改服务端代码改用https模块创建服务器:
const https = require("https"); const fs = require("fs"); const express = require("express"); const app = express(); // 配置SSL证书路径 const sslOptions = { key: fs.readFileSync("/etc/letsencrypt/live/your-domain/privkey.pem"), cert: fs.readFileSync("/etc/letsencrypt/live/your-domain/fullchain.pem") }; // 创建HTTPS服务器 const server = https.createServer(sslOptions, app); const io = require("socket.io")(server); // 启动服务器,监听443端口(HTTPS默认端口) server.listen(443, () => { console.log("HTTPS服务器已启动"); });
解决方案二:客户端改用HTTP/WS连接(仅测试环境)
如果是本地测试或开发环境,把客户端连接地址改成http开头,而非https:
// 示例:连接本地HTTP服务器 const socket = io("http://your-server-ip:3000");
注意事项
- 生产环境必须使用HTTPS/WSS,防止数据明文传输被窃取
- 确保服务器对应端口(443或自定义端口)的防火墙已开放
- 若使用Nginx等反向代理,需添加WebSocket代理配置,确保socket.io连接能正常转发
内容的提问来源于stack exchange,提问作者corasphinx
相关产品推荐
相关产品推荐

