公共互联网何时(以及多久)会阻止 WebSocket 连接?
Posted
技术标签:
【中文标题】公共互联网何时(以及多久)会阻止 WebSocket 连接?【英文标题】:When (and how often) will the public Internet preclude WebSocket connections? 【发布时间】:2020-03-04 06:25:35 【问题描述】:spring documentation 说:
在公共 Internet 上,您无法控制的限制性代理可能会阻止 WebSocket 交互,因为它们未配置为传递 Upgrade 标头,或者因为它们关闭了看似空闲的长期连接。
第二个问题可以通过心跳包来解决。但是,当今世界(2020.03)会多久出现第一个问题?今天是不是从来都不是问题,还是仍然是个大问题?
另外,会不会有其他问题让我无法使用WebSocket?
附:我在 Flutter 中使用 WebSocket 客户端,所以浏览器支持不是问题。
非常感谢您的任何想法!
【问题讨论】:
【参考方案1】:直到今天,仍然存在 WebSocket 无法工作的实际案例,即使不像过去那么频繁。一个典型的例子是当您使用不支持 WebSockets 的公司代理/防火墙时(许多 BlueCoat 安装都有这个问题)。还有一些透明代理阻止 WebSockets,即使这通常适用于未加密的连接。如果您选择 WSS(基于 TLS 的 WebSockets),大多数网络中介不会遇到 WebSocket 设置问题,除非它们通过在客户端中注入自定义证书来解密所有流量(就像在某些公司网络上发生的那样)。然后,双向心跳可用于确保中介不会关闭空闲的 WebSocket。
作为一般建议,如果您的应用程序是关键任务,则应始终提供备用传输,以防 WebSocket 不起作用。后备传输包括 HTTP 流式传输和 HTTP 长轮询。
【讨论】:
非常感谢!然后我会使用 WSS :) 顺便说一下,我认为如果中介注入证书,android 或 ios 不会对此感到高兴,并抛出某种错误说“你有一个不受信任的证书”,所以我不担心吗? @ch271828n:我认为如果设备由公司管理,有办法解决这个问题。至少在 Android 上,这可能会导致一个永久的、不可忽略的通知,有效地显示“请注意,您的公司可以读取您的所有网络流量”,这严重暗示在这种情况下,他们确实接受了这种注入的根证书。 @JoachimSauer 是的,我在使用 Fiddler 捕获数据包时也看到了这一点。所以我认为大多数应用程序用户不会真正这样做。谢谢!以上是关于公共互联网何时(以及多久)会阻止 WebSocket 连接?的主要内容,如果未能解决你的问题,请参考以下文章