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

Spring Boot的WebSocket在Postman可连但Chrome无法连接如何解决

WebSocket跨源连接失败问题解决方案

核心原因

WebSocket请求受浏览器同源策略约束,这就是你在Postman中可以正常连接,但浏览器中连接失败的直接原因:

  • Postman属于桌面客户端工具,默认不会执行同源安全校验
  • 浏览器会校验发起请求的前端页面源(协议、域名、端口)与WebSocket服务源是否完全一致,任意一项不匹配都会触发拦截

具体配置解决方案

根据你Spring Boot项目中使用的WebSocket实现方式,选择对应配置即可:

1. 原生JSR-356 WebSocket实现(使用@ServerEndpoint注解)

直接在@ServerEndpoint注解中添加允许跨源的配置即可:

@ServerEndpoint(value = "/ws/v1", allowedOrigins = "*")
// 生产环境建议替换为实际前端源,例如allowedOrigins = "http://localhost:5173"
public class MyWebSocketEndpoint {
    // 原有业务逻辑
}

如果上述配置不生效,可在Spring配置类中额外声明ServerEndpointExporter时增加全局跨源配置。

2. Spring WebSocket STOMP协议实现

在实现WebSocketMessageBrokerConfigurer接口的配置类中,重写注册端点方法时添加跨源配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws/v1")
                // 开发环境可配置为通配符,生产环境替换为实际前端域名
                .setAllowedOriginPatterns("*");
                // 如果你使用SockJS兼容方案,再加下面这行
                // .withSockJS();
    }
    // 其他原有配置
}

常见附加排查点

  • 打开Chrome开发者工具「网络」面板,过滤WS类型请求,查看握手请求的响应头是否存在Access-Control-Allow-Origin字段,确认值与前端页面源匹配
  • 如果你的前端页面是HTTPS协议,不能直接连接ws://开头的非加密WebSocket服务,必须使用wss://协议,否则会被浏览器直接拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:09:02