开发者社区 问答 正文

websocket部署后在谷歌浏览器异常断开问题

后端springboot前端vue开发的网页,利用websocket实现操作数据库前端网页实时刷新的功能

我在本地调试了,测试了几个浏览器都可以正常接收消息 1.png 用IIS部署在服务器上以后再测试,火狐浏览器可以正常接收,在谷歌内核的浏览器,edge这些连接成功马上断开,报错误码1006,原因空,后台没有断开的日志输出 2.png 3.png 前端有心跳监测,做判断的webSocket.readyState输出为3,查了下值是3 (WebSocket.CLOSED)连接已关闭或者没有链接成功,关闭网页时后端也没有断开连接的提醒

找了好几天也没查到相关说明,有没有大佬遇见过类似问题的(°ー°〃)

展开
收起
肥波的日常bug 2022-05-13 09:26:41 1064 分享 版权
阿里云 AI 助理回答

根据您描述的问题,后端使用Spring Boot配合前端Vue开发的网页,在本地调试一切正常,但部署到IIS服务器后,谷歌内核的浏览器(如Chrome、Edge)在使用WebSocket时出现连接成功后立即断开的情况,错误码为1006且无具体原因,同时后台日志未记录断开连接的信息。前端检测到WebSocket状态为CLOSED(3),表示连接已关闭或未成功建立。

针对这一问题,我们可以从以下几个方面进行排查和解决:

  1. 检查IIS配置

    • 确保IIS支持WebSocket协议。在IIS管理器中,需要为网站启用WebSocket协议支持。
    • 检查IIS的应用程序池设置,确保其与您的应用兼容。例如,.NET CLR版本应与项目需求匹配,回收设置不应频繁中断服务。
  2. Websocket握手与协议兼容性

    • 谷歌内核浏览器对WebSocket协议的支持较为严格,请确认后端WebSocket服务端点正确实现了握手过程,并遵循RFC 6455标准。
    • 检查是否有特定的HTTP头部或者安全策略(如CORS)配置不当,导致某些浏览器无法完成握手。
  3. 防火墙与网络限制

    • 确认服务器的防火墙及网络安全组规则允许WebSocket所用端口(默认为80/443)的进出流量。
    • 如果有企业级防火墙或代理服务器,请检查它们是否拦截或修改了WebSocket连接的数据包。
  4. SSL/TLS配置

    • 若WebSocket服务运行在HTTPS上,确保SSL证书有效且浏览器信任该证书。不被信任的证书可能导致连接失败。
    • 检查TLS版本设置,确保服务器与浏览器之间使用的TLS版本兼容。
  5. 前端代码适配

    • 确认前端WebSocket实现对不同浏览器的兼容性良好,特别是在处理连接关闭逻辑时。考虑增加重连机制以应对意外断开。
  6. 日志与监控增强

    • 在后端WebSocket服务中增加详细的日志记录,特别是对于连接建立、消息收发及异常断开等关键环节,以便于定位问题。
    • 使用网络抓包工具(如Wireshark)分析客户端与服务器间的WebSocket通信,查找可能的异常数据包或协议错误。
  7. 测试环境对比

    • 尝试在其他非IIS服务器环境(如Nginx)部署应用,以排除是IIS特有的配置问题导致的故障。

请逐一排查上述方面,特别注意服务器配置与协议细节,这往往是跨浏览器兼容性问题的根源。希望这些建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答