【问题标题】:Cannot connect to websocket when I change from localhost to a particular URL address当我从 localhost 更改为特定 URL 地址时无法连接到 websocket
【发布时间】:2022-06-19 14:59:02
【问题描述】:

我有一个在 Spring maven 框架中开发的 WebSocket 应用程序,当它部署在 localhost:8080/test 中时效果非常好,其中 test 是我的套接字端点。现在我将应用程序部署在我的 AWS 云服务器中,并尝试使用相同的方法连接到云服务器,但使用特定的 URL(例如,https://example.com/test),其中 test 是 WebSocket 端点和 URL (example.com) 是我的链接,类似于 localhost:8080。我还在安全组中打开了必要连接所需的端口。

对于 localhost 它工作正常,但是当我尝试将它连接到我的云服务器时,WebSocket 总是返回状态为 400 的错误函数。我不确定为什么会出现状态 400,因为根据我的知识,状态 400 意味着这是一个糟糕的要求。我做错了什么?

我在下面粘贴我的 java 代码

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/ws/");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/test").setAllowedOrigins("*"); // This will allow you to use ws://localhost:8080/test to establish websocket connection
        registry.addEndpoint("/test").setAllowedOrigins("*").withSockJS(); // This will allow you to use http://localhost:8080/test to establish websocket connection
    }

}

是我遗漏的任何配置还是我遗漏的任何代码 sn-p?

P.S:我所有的测试主要是使用 POSTMAN Websocket 请求完成的,是的!我使用 wss:// 例如.com

我的 POSTMAN URL 往往是 wss://example.com/test ------> 不起作用

ws://localhost:8080/test -------> 这行得通

【问题讨论】:

  • 嗨。让我们从确定请求是否通过日志到达您的应用程序服务器/网络服务器开始。如果存在日志,则意味着 Spring 出于某种原因拒绝了他们的请求,否则是 AWS 配置拒绝了。 PS。请检查您是否允许 TCP 连接而不仅仅是 HTTP。
  • 您是否在您的 websocket 服务器中启用 SSL?您似乎正在侦听端口 8080。因此,您的 Web 服务器不会处理该请求。我不了解 Java,但在 Node.js 中构建 websocket 服务器时遇到了类似的问题。我必须手动向服务器提供证书和私钥,以便它在安全通道上监听。同样在这种情况下,您需要在客户端中使用 wss:// 来连接到 websocket。
  • @Paras 是的,它正在到达服务器。

标签: java spring spring-boot maven websocket


【解决方案1】:

我发现了问题。我一直在 Apache 服务器后面托管我的 tomcat 服务器,该服务器实际上将流量路由到 tomcat。所以我收到错误 Spring WebSocket: Handshake failed due to invalid Upgrade header: null.

我从 Spring WebSocket: Handshake failed due to invalid Upgrade header: null 找到了解决此问题的方法

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题Spring boot STOMP websocket works locally, but not on deployed server

    你能告诉我你是怎么解决的吗?

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 2020-10-12
      • 1970-01-01
      • 2012-02-12
      • 2019-12-12
      • 2018-08-07
      • 2016-01-08
      • 2020-09-27
      • 2020-06-08
      相关资源
      最近更新 更多