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

WebSocket客户端无法跨端口连接Java Spring WebSocket服务器求助

问题原因

WebSocket本身不强制要求客户端与服务器同端口/同域,你遇到的连接失败是浏览器的同源策略限制导致的。localhost:8080和localhost:3000属于不同源(端口不同),浏览器会拦截跨域的WebSocket握手请求,进而导致连接失败。

解决方案

在Spring WebSocket的配置中显式添加跨域允许规则即可解决问题,修改你的WebSocketConfig类:

// WebSocketConfig.java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer  {
    @Autowired
    SocketTextHandler socketTextHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(socketTextHandler, "/sockets")
                // 允许指定跨域源,可传入多个参数
                .setAllowedOrigins("http://localhost:3000");
                // 如果需要允许所有源,可替换为 .setAllowedOrigins("*")
    }
}

补充说明

  • 同端口下客户端与服务端属于同源,浏览器不会触发跨域拦截,因此能正常连接;
  • setAllowedOrigins方法可以指定单个或多个允许的跨域源,生产环境不建议直接用"*",应指定具体可信域名;
  • 配置后,localhost:3000的客户端发起WebSocket连接时,服务器会在握手响应中添加跨域允许的Header,浏览器就不会拦截请求了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:20:48