HTTP/2 上的 WebSockets 和 GOAWAY

WebSockets over HTTP/2, and GOAWAY

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

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

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

Now, I know that GOAWAYs are connection-level events, and if IIUC, a WebSocket/H2 connection is actually a single H2 stream which has been upgraded.

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

我们的目标是使用一个 TCP 连接来承载可能的多个协议,因此一些流是正常的 HTTP/2 而一些是 WebSocket over HTTP/2 的情况是可能的。

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

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

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

我认为不应向浏览器的 WebSocket API 添加任何事件,通过 HTTP/2 的传输对于客户端应用程序应该是完全透明的,就像使用 HTTP/1.1 或HTTP/2 当使用 XMLHttpRequestfetch().