如何在 HTTP2 中保持长连接?

How to keep long connection in HTTP2?

我正在阅读 Alexa 语音服务功能的文档,并遇到了管理 HTTP2 连接的部分。我真的不明白这个下行通道在幕后是如何运作的。是否使用服务器推送?那么,服务器推送可以用来保持长连接吗?或者它只是使用一些技巧来保持连接很长时间?

如文档所述,客户端需要与服务器建立下行通道流。

根据我在此处阅读的内容 https://www.rfc-editor.org/rfc/rfc7540,来自此状态图:

一旦流发送一个 HEADER 帧,后跟一个 END STREAM 标志,从客户端的角度来看,状态将是半关闭(本地)。所以,这就是设备半关闭状态发生的方式,如上图所示。如果我错了请纠正我。

对于管理 HTTP 连接,是这样说的。

根据我的理解:客户端为GET请求设置了60分钟的超时时间。请求发送后,服务器不会发送任何响应。然后连接将保持打开状态 60 分钟。但是一旦服务器发送了响应,就应该关闭连接。这不是应该发生的吗?或者,是因为服务器通过下行通道流发送响应时,没有发送END STREAM标志,所以流不会被关闭?

But once a response is sent from the server, the connection should be closed.

HTTP/1.1 和 HTTP/2 使用持久连接,这意味着单个连接不仅可以用于一个 request/response,还可以用于多个 request/response 周期.

只有 HTTP/1.0 在响应后关闭了连接,因此对于 HTTP/2 情况并非如此,连接将保持打开状态,直到任一对等方决定明确关闭它。

关于空闲超时的建议正是为了防止客户端在没有看到网络流量时过早明确关闭连接,独立于请求或响应。​​