【问题标题】:Websockets not connected behind proxyWebsockets未在代理后面连接
【发布时间】:2016-12-22 19:38:56
【问题描述】:

这是一个很常见的问题,但我找不到针对我的具体情况的解决方案。我正在使用 Glassfish 4.1.1,我的应用程序实现了 Websockets。

在客户端,我通过以下方式连接到 WS-server:

var serviceLocation = "ws://" + window.location.host + window.location.pathname + "dialog/";
var wsocket = new WebSocket(serviceLocation + token_var);

在服务器端 websocket 是通过 @ServerEndpoint 功能实现的,看起来很常见:

@ServerEndpoint(value = "/dialog/{token}", decoders = DialogMessageDecoder.class)
public class DialogWebsoketEndpoint {

    @OnOpen
    public void open(final Session session, @PathParam("token") final String token) { ... }
etc.
}

在客户尝试通过代理连接之前,一切正常。 使用此测试:http://websocketstest.com/ 我发现客户的计算机在 http-proxy 1.1 之后工作。 他无法连接到 websockets,onopen 根本不会触发。 wsoscket.readyState 永远不会变成 1。

如何调整我的 ServerEndpoint 以使此代码即使在客户通过代理连接时也能正常工作?

提前谢谢你!

更新:我会在该计算机上提供带有 websocketstest 的屏幕截图:

在我的电脑上,除了一件事之外,它看起来很相似: HTTP 代理:否。

【问题讨论】:

  • 希望this link能帮到你
  • 我不想成为坏消息的承担者,但很可能是代理服务器本身不能正确支持 websockets。您无法将其编程掉,除非使用 Socket.IO 提供的轮询回退机制。
  • Gimby,感谢您的回答,但websocketstest.com 表明握手(和回声测试)通过 ssl 443 端口成功。所以我认为 websockets 可以与该代理服务器一起使用。
  • @Sanjeev,我想在我的情况下不需要设置凭据。因为我的网络没有任何代理。只有客户端计算机在代理后面工作。 (如果我误解了,请纠正我)
  • @Luxor 如果您的客户端使用代理连接到外部世界,并且该代理服务器在连接到您的服务器时也会被使用,那么是的,他们需要使用这些设置

标签: javascript java proxy websocket glassfish


【解决方案1】:

正如问题中的 cmets 所说,代理似乎不能正确支持 Websocket。

这是一个常见问题(一些手机公司有代理会中断 websocket 连接),解决方案是使用 TLS/SSL 连接。

问题出现主要是因为一些代理“正确”(阅读:损坏)Websocket 请求标头。

但是,当使用 TLS/SSL 时,代理无法读取标头数据(已加密),导致数据在大多数代理上“直通”。

这意味着标头将安全到达另一端,并且代理将(大部分)忽略连接...这可能仍会导致连接超时问题,但通常可以解决问题。

编辑

请注意,浏览器将保护客户端免于将非加密内容与加密内容混合。使用 TLS/SSL 连接时,请确保脚本使用 wss 变体启动 ws 连接。

【讨论】:

  • 谢谢!我们会努力的!
  • @Luxor 成功了吗?
  • @Gimby,是的!现在它通过 https/ssl 工作(使用 wss 协议)。非常感谢Myst!我也将答案标记为最佳答案!
  • 如果代理打算呈现 TLS/SSL 前端但后端未加密怎么办?
  • @Michael - 这是一个非常常见的设置,其中代理用作 SSL/TLS 网关到安全(通常是封闭的)后端。但是,这是 endpoint proxy 而不是我在回答中引用的 intermediary proxiesendpoint 代理易于升级和管理,与您可能会发现安装在不同网络区域之间的 intermediary / hardware 代理单元不同。
猜你喜欢
  • 2015-10-20
  • 1970-01-01
  • 2015-10-17
  • 2016-02-18
  • 2022-06-29
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多