为什么HTTP/2流ID必须升序?

6
在RFC 7540第5.1.1节中(https://www.rfc-editor.org/rfc/rfc7540#section-5.1.1),它指定如下:
新建流的标识符必须大于发起端已打开或保留的所有流的数字。
我在谷歌上搜索了很多,但仍然没有人解释为什么流ID必须按升序排列。从我的角度来看,如果服务器将“流ID”视为ID并用其来区分HTTP2请求,则乱序流ID也应该可以正常工作。
所以有人能帮忙解释一下这个规范的确切原因吗?
非常感谢!
2个回答

9

严格递增的流ID是使它们(每个连接)唯一的简单方法,而且实现起来非常容易。

选择像你所说的“无序”的流ID可能更加复杂,因为它需要避免冲突,并且可能消耗更多资源,因为您必须记住所有正在使用的流ID。

我认为没有任何特殊原因要指定流ID必须是递增的,除了简单性。


那听起来很合理。 - Paul Yang

4

6.8. GOAWAY

GOAWAY帧(类型=0x7)用于启动连接关闭或通知严重错误条件。GOAWAY允许端点在仍然完成先前建立的流的处理时优雅地停止接受新的流。这使得像服务器维护之类的管理操作成为可能。

在端点开始新流和远程发送GOAWAY帧之间存在固有的竞争条件。为了处理这种情况,GOAWAY包含在此连接中发送端上已处理或可能处理的最后一个对等端发起的流的流标识符。例如,如果服务器发送GOAWAY帧,则标识的流是客户端发起的最高编号的流。

一旦发送,如果流具有比所包含的最后流标识符更高的标识符,则发送方将忽略由接收方在流上发送的帧。GOAWAY帧的接收者不得在连接上打开其他流,尽管可以为新流建立新连接。

如果GOAWAY的接收者已经在比GOAWAY帧中指示的流标识符更高的流上发送数据,则这些流不会被处理。GOAWAY帧的接收者可以将这些流视为从未创建过,从而允许稍后在新连接上重试这些流。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接