Python连接NodeJS的ws服务端报WebSocket HTTP 200错误是什么原因?
错误原因
该报错出现在WebSocket握手阶段:正常WebSocket连接握手时服务端应返回101 Switching Protocols状态码,返回200说明Python客户端的握手请求根本没有正确触发Node端的WebSocket服务逻辑,该错误和你代码中的密钥校验逻辑无关,密钥校验是连接建立成功后才会执行的逻辑。最常见的触发原因如下:
- 端口被其他HTTP服务占用:你指定的2909端口上已经运行了普通HTTP服务,Node的ws服务没有成功绑定端口(部分场景下端口被占启动不会抛出直观报错),导致客户端连接到了其他HTTP服务上返回200
- IP地址配置错误:运行Node服务的设备局域网IP并不是你填写的
192.168.1.50,或客户端和服务端不在同一个局域网、无法访问该IP - 防火墙/代理拦截:服务端防火墙拦截了2909端口的入站请求,或客户端开启了系统代理,WebSocket握手请求被代理转发到了其他服务
- 依赖版本兼容问题:你安装的
ws包版本和Python的websockets库存在罕见的握手兼容问题
排查方案
- 先在运行Node服务的设备上,用浏览器访问
http://127.0.0.1:2909,正常ws服务会返回426 Upgrade Required,如果返回其他内容直接说明端口被占,更换Node服务端口后重启即可 - 确认Node设备的实际局域网IP:Windows设备运行
ipconfig、Linux/macOS设备运行ip addr查看网卡IP,和Python代码中填写的地址比对 - 临时关闭服务端和客户端的防火墙,或手动放行2909端口的TCP规则后重试
- 关闭客户端的系统代理,或给websockets连接配置跳过局域网代理规则
- 可先在Node设备本地运行Python代码,将地址改为
ws://127.0.0.1:2909测试:如果本地能正常连接则可以确定是网络配置问题,如果本地也报错可以重新安装ws依赖后重试:
npm uninstall ws && npm install ws
内容的提问来源于stack exchange,提问作者Steven Rottmair
相关产品推荐
相关产品推荐

