首页 > 解决方案 > 如何在 HTTP2 中保持长连接?

问题描述

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

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

在此处输入图像描述

根据我在这里阅读的内容https://www.rfc-editor.org/rfc/rfc7540,从此状态图中:

在此处输入图像描述

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

对于管理 HTTP 连接,这就是它所说的。

在此处输入图像描述

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

标签: http2

解决方案


但是一旦从服务器发送响应,连接就应该关闭。

HTTP/1.1 和 HTTP/2 使用持久连接,这意味着单个连接不仅可以用于一个请求/响应,还可以用于多个请求/响应周期。

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

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


推荐阅读