【问题标题】:When (and how often) will the public Internet preclude WebSocket connections?公共互联网何时(以及多久)会阻止 WebSocket 连接?
【发布时间】:2020-03-04 06:25:35
【问题描述】:

spring documentation 说:

在公共 Internet 上,您无法控制的限制性代理可能会阻止 WebSocket 交互,因为它们未配置为传递 Upgrade 标头,或者因为它们关闭了看似空闲的长期连接。

第二个问题可以通过心跳包来解决。但是,当今世界(2020.03)会多久出现第一个问题?今天是不是从来都不是问题,还是仍然是个大问题?

另外,会不会有其他问题让我无法使用WebSocket?

附:我在 Flutter 中使用 WebSocket 客户端,所以浏览器支持不是问题。

非常感谢您的任何想法!

【问题讨论】:

    标签: spring flutter networking websocket


    【解决方案1】:

    直到今天,仍然存在 WebSocket 无法工作的实际案例,即使不像过去那么频繁。一个典型的例子是当您使用不支持 WebSockets 的公司代理/防火墙时(许多 BlueCoat 安装都有这个问题)。还有一些透明代理阻止 WebSockets,即使这通常适用于未加密的连接。如果您选择 WSS(基于 TLS 的 WebSockets),大多数网络中介不会遇到 WebSocket 设置问题,除非它们通过在客户端中注入自定义证书来解密所有流量(就像在某些公司网络上发生的那样)。然后,双向心跳可用于确保中介不会关闭空闲的 WebSocket。

    作为一般建议,如果您的应用程序是关键任务,则应始终提供备用传输,以防 WebSocket 不起作用。后备传输包括 HTTP 流式传输和 HTTP 长轮询。

    【讨论】:

    • 非常感谢!然后我会使用 WSS :) 顺便说一下,我认为如果中介注入证书,Android 或 iOS 不会对此感到高兴,并抛出某种错误说“你有一个不受信任的证书”,所以我不担心吗?
    • @ch271828n:我认为如果设备由公司管理,有办法解决这个问题。至少在 Android 上,这可能会导致一个永久的、不可忽略的通知,有效地显示“请注意,您的公司可以读取您的所有网络流量”,这严重暗示在这种情况下,他们确实接受了这种注入的根证书。
    • @JoachimSauer 是的,我在使用 Fiddler 捕获数据包时也看到了这一点。所以我认为大多数应用程序用户不会真正这样做。谢谢!
    猜你喜欢
    • 2021-01-06
    • 2014-06-14
    • 2013-06-22
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多