【问题标题】:WebSockets over HTTP/2, and GOAWAY基于 HTTP/2 的 WebSockets 和 GOAWAY
【发布时间】:2020-10-20 04:34:48
【问题描述】:

我对基于 HTTP/2 的 WebSockets 如何在带有 GOAWAY 的浏览器(特别是 Firefox,因为这是我所知道的唯一支持 H2 上的 Websockets)上的工作感兴趣。

现在,我知道 GOAWAY 是连接级别的事件,如果是 IIUC,WebSocket/H2 连接实际上是一个已升级的单个 H2 流。

假设我们现在从服务器获得了 GOAWAY - 我们是否希望浏览器只关闭支持 WebSocket 连接的 H2 流,CloseEvent 代码为 1001?是否有其他事件被触发/需要添加到 WebSocket API,例如,ongoaway

【问题讨论】:

    标签: websocket http2


    【解决方案1】:

    现在,我知道 GOAWAY 是连接级别的事件,如果是 IIUC,WebSocket/H2 连接实际上是一个已升级的单个 H2 流。

    单个 HTTP/2 连接可能有多个 HTTP/2 流,每个流都可能是基于 HTTP/2“升级”流的 WebSocket(请参阅this section)。

    目标是使用单个 TCP 连接可能承载多个协议,因此可能会出现一些流是普通 HTTP/2 而一些流是基于 HTTP/2 的 WebSocket 的情况。

    当服务器发送连接级别 GOAWAY 时,我希望客户端按照this section 中指定的方式做出反应。

    特别是服务器可能会发送一个“优雅的”GOAWAY,因此客户端不会打开新的流。

    当服务器即将发送 GOAWAY 时,它应该安排发送一个终端(即endStream=trueDATA 帧,其中包含一个 WebSocket Close 帧,这将导致浏览器中出现一个CloseEvent

    我认为不应该将任何事件添加到浏览器的 WebSocket API,通过 HTTP/2 的传输对于客户端应用程序应该是完全透明的,就像在使用 XMLHttpRequest 时使用 HTTP/1.1 或 HTTP/2 是透明的一样或fetch()

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 2021-03-21
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多