2

在某种情况下,我的应用程序有问题。

我们有一个嵌入了 jetty webserver 的 java 服务器,以及一个客户端的 air 应用程序。

它工作正常,但在某个客户的单一情况下。

他们有一个不由他们管理的专用网络(并且很少有机会根据请求进行更改)。因此,他们允许的唯一端口是 80 和 443。

服务器和客户端之间的通信是通过 websockets 和 http 进行的。

“在线”检查是通过 http 进行的,然后,我们使用 websockets 通知客户端以便开始它们之间的通信。

问题是,在这种情况下,“在线”状态正常工作,客户端发送的任何通信(强制),当它通过 http 时,都会到达服务器,但是,当服务器使用 websockets 与客户端通信时,它不起作用。

我们正在使用wireshark来检查通信:在工作设置中,当客户端应用程序启动时,服务器端的wireshark上会显示一个websocket(在服务器上注册客户端)。而且,在那之后,仅用于从服务器到客户端的 websockets 也不会显示。

可能是什么问题?80端口?(该网络上的 443 也是如此)。它可以是阻止 ws:// 消息的代理/防火墙吗?我在某处读过 wss://(加密的 websockets)可以工作吗?

谢谢你的帮助。


编辑,所以,我尝试使用 https 和 wss 通信,同样的事情发生了。客户端和服务器之间没有设置 websocket(在服务器上注册客户端)。

客户网络上的 http 正在发生这种情况。在我的测试网络上,它适用于 http/ws 但不适用于 https/wss..

4

1 回答 1

3

有许多防火墙和网关不了解整个 WebSocket HTTP/1.1 GET -> UPGRADE -> WebSocket 机制。

有几个损坏的防火墙实现会尝试将 WebSocket 框架解释为 HTTP/1.1 的不正确内容(这是对 HTTP/1.1 规范的错误解读)并开始使用它。

检查/过滤/分析请求/响应内容的防火墙类型似乎最容易受到影响。

我会检查他们用来为网络设置防火墙的硬件(或软件)是否兼容并已升级以支持 WebSocket RFC-6455。

于 2013-08-12T15:31:06.803 回答