http2 - 如何在 HTTP2 中保持长连接?
问题描述
我正在阅读 Alexa 语音服务功能的文档,并遇到了管理 HTTP2 连接的部分。我真的不明白这个下行通道是如何在幕后工作的。是否使用服务器推送?那么,服务器推送可以用来保持长连接吗?还是只是使用一些技巧来保持连接很长时间?
如文档所述,客户端需要与服务器建立下行通道流。
根据我在这里阅读的内容https://www.rfc-editor.org/rfc/rfc7540,从此状态图中:
一旦流发送一个 HEADER 帧,后跟一个 END STREAM 标志,从客户端的角度来看,状态将是半关闭(本地)。因此,这就是设备半关闭状态的发生方式,如上图所示。如果我错了,请纠正我。
对于管理 HTTP 连接,这就是它所说的。
根据我的理解:客户端为 GET 请求设置了 60 分钟的超时时间。请求发送后,服务器不会发送任何响应。然后连接将保持打开状态 60 分钟。但是一旦从服务器发送响应,连接就应该关闭。这不应该发生吗?或者,是因为当服务器通过下行通道流发送响应时,它没有发送 END STREAM 标志,所以流不会被关闭?
解决方案
但是一旦从服务器发送响应,连接就应该关闭。
HTTP/1.1 和 HTTP/2 使用持久连接,这意味着单个连接不仅可以用于一个请求/响应,还可以用于多个请求/响应周期。
只有 HTTP/1.0 在响应后关闭连接,因此对于 HTTP/2 情况并非如此,连接将保持打开状态,直到任一对等方决定显式关闭它。
关于空闲超时的建议正是为了防止客户端在没有看到网络流量时过早地显式关闭连接,独立于请求或响应。
推荐阅读
- wso2 - 如何格式化 WSO2 EI Rest API 中的日期字段
- c++ - 检查文件中的每个字符串是否只有一个单词
- mysql - 在将字符串保存到 Mysql 之前验证字符串是否占用超过 3 个字节的字符
- php - 如何使用 Carbon 比较两个日期并找出哪个日期更大?
- flutter - 我想让容器在列中隐藏溢出
- ios - 如何在swift中将OTP发送到带有国家代码的电话号码
- jquery - Append and set listener on generated elements
- reactjs - 如何更改左对齐文本的颜色?
- neo4j - 获取没有重复的 Neo4j 节点和关系数据
- typescript - 哈希器在环回中为相同的密码生成不同的哈希值?