WebSocket仅能在Safari建立连接,Chrome/Edge报EOFException求助排查
WebSocket连接异常排查(仅Safari可用,Chrome/Edge报EOFException)
可能的问题及解决方案:
握手拦截器未配置
你的代码中注入了UserHandlerShakeHandler但未在WebSocket注册时添加,Chrome/Edge对跨域握手的校验更严格,缺失拦截器可能导致连接中断。修改Spring Boot配置:@Configuration @EnableWebSocket public class WsConfig implements WebSocketConfigurer { @Autowired UserWsHandler userWsHandler; @Autowired UserHandlerShakeHandler userHandlerShakeHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(userWsHandler, "/loginWs") .addInterceptors(userHandlerShakeHandler) // 添加握手拦截器 .setAllowedOriginPatterns("*"); } }混合内容拦截
如果你的前端页面通过HTTPS访问,但WebSocket使用ws://(HTTP协议),Chrome/Edge会拦截这类混合内容(Safari限制较宽松)。解决方式:- 前端页面和WebSocket统一协议:页面用HTTP则WebSocket用
ws://,页面用HTTPS则WebSocket改用wss://并配置Spring Boot SSL。 - 测试阶段可临时在Chrome启用
chrome://flags/#allow-insecure-localhost,重启浏览器后重试(生产环境禁用)。
- 前端页面和WebSocket统一协议:页面用HTTP则WebSocket用
WebSocketHandler异常
检查UserWsHandler的连接、消息处理逻辑,若存在未捕获的异常,会导致Chrome/Edge端连接被强制关闭触发EOFException。建议在handler方法中添加日志,打印连接建立、消息接收的完整流程,定位异常点。浏览器插件或代理干扰
Chrome/Edge的代理、广告拦截等插件可能拦截WebSocket连接,尝试用隐身模式打开页面,或禁用所有扩展后测试。
内容的提问来源于stack exchange,提问作者Steven Linus
相关产品推荐
相关产品推荐

