err_connection_refused表明tcp连接在握手前即失败,根本原因是服务未监听指定端口,常见于服务未启动、绑定127.0.0.1而非0.0.0.0、防火墙/安全组未放行、docker端口未映射或协议(ws/wss)不匹配。

WebSocket连接失败显示ERR_CONNECTION_REFUSED,基本可以断定:客户端根本没碰到服务端进程——不是协议或跨域问题,是网络链路在握手前就断了。
服务进程是否真在监听指定端口
很多人执行了node server.js或uvicorn main:app --port 8000就以为万事大吉,但服务可能已崩溃、启动报错静默退出,或监听了错误地址。
- 用
lsof -i :8000(macOS/Linux)或netstat -ano | findstr :8000(Windows)确认端口是否被当前用户进程占用;无输出 = 服务没起来 - 检查服务日志:如果用了
--log-level debug或console.log("server started"),确保这行输出真实出现过 - 关键细节:
--host 0.0.0.0必须显式指定,否则默认只监听127.0.0.1,远程或Docker内访问会直接Connection Refused
防火墙与容器网络配置是否放行
本地localhost能连 ≠ 其他机器能连。服务器部署后最常卡在这步。
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
- Linux上查防火墙:
sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS),确认目标端口在允许列表中 - Docker场景:检查
docker run -p 8000:8000是否漏写,或EXPOSE未配合-p使用;容器内服务监听0.0.0.0:8000,但宿主机没映射,一样拒绝 - 云服务器(如阿里云/腾讯云):安全组规则必须手动放行对应端口,控制台设置不生效是高频误操作点
客户端URL与服务端协议是否匹配
协议不一致不会报404或跨域,而是直接Connection Refused——因为底层TCP连接尝试发到了错误端口或协议栈拒绝协商。
- 服务端用HTTP端口(如80/8000)跑WS,客户端必须用
ws://;若服务端启用了TLS(wss),客户端却写ws://,浏览器会拒绝发起连接(不走网络层,直接报错) - URL路径要精确:比如服务端路由是
/ws/transcribe,客户端连ws://host:8000/ws/transcribe/(末尾多斜杠)可能被某些框架拒绝,返回Connection Refused而非404 - 前端调试时,别依赖
window.location.origin拼接WS地址——它返回http://或https://,需手动替换为ws://或wss://
真正棘手的不是Connection Refused本身,而是它掩盖了更底层的问题:你看到的是“连接被拒”,但实际可能是服务根本没活、端口被占、防火墙挡死、Docker没暴露、云平台安全组锁死——所有这些,都不会在浏览器控制台给出任何提示,只留一个冰冷的错误码。










