You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Websockets服务器wss连接失败:出现EOFError("line without CRLF")错误

解决Websockets服务器EOFError("line without CRLF")问题

这个错误的核心是Websocket握手阶段的HTTP头不符合协议规范——Websocket握手基于HTTP协议,要求每个头字段必须以\r\n(CRLF)结尾,若服务器收到的请求头缺少该格式,或数据传输中断导致内容不完整,就会触发该错误。针对wss连接场景,可按以下方向排查修复:

检查TLS证书与配置

  • 确保服务器使用的TLS证书完整有效(包含链式证书),wss依赖TLS加密,证书异常会导致握手数据传输紊乱
  • 若使用websockets库搭建wss服务器,确认代码正确加载证书文件,示例代码:
    import asyncio
    import websockets
    import ssl
    
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    ssl_context.load_cert_chain(certfile="fullchain.pem", keyfile="privkey.pem")
    
    async def handler(websocket):
        # 业务处理逻辑
        pass
    
    async def main():
        async with websockets.serve(handler, "0.0.0.0", 9000, ssl=ssl_context):
            await asyncio.Future()  # 保持服务运行
    
    asyncio.run(main())
    

验证握手数据格式

  • 检查自定义握手逻辑是否遗漏了\r\n结尾,确保响应头严格遵循HTTP规范
  • 若用反向代理(如Nginx)转发wss请求,确认代理配置未修改HTTP头格式,Nginx配置示例:
    location /ws {
        proxy_pass http://localhost:9000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
    
    注意:代理不可截断或修改请求/响应头的换行符

排查网络层问题

  • 检查服务器9000端口的防火墙规则,确保允许双向TCP流量,避免数据包被中途截断
  • 先测试无加密的ws连接(ws://myserver.com:9000),若ws能正常工作,说明问题集中在TLS配置或wss加密传输环节

升级websockets库版本

  • 旧版本websockets库可能存在握手格式相关bug,执行pip install --upgrade websockets升级到最新稳定版后重新测试

内容的提问来源于stack exchange,提问作者Larry K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:05