。 (https://tools.ietf.org/html/rfc7540#section-5.1.1),它指定如下:
新建立的流的标识符必须在数字上大于发起端点已打开或保留的所有流。
我在Google上搜索了很多,但仍然没有人解释为什么流ID必须按升序排列。我认为将此规则引入协议没有任何好处。从我的角度来看,如果服务器只将“流ID”视为ID并使用它来区分HTTP2请求,那么乱序流ID也应该可以正常工作。
那么任何人都可以帮助解释这个规范的确切原因吗?
非常感谢!
答案 0 :(得分:4)
严格上升的流ID是一种简单的方法,可以使它们成为唯一的(每个连接),并且它非常容易实现。
选择 - 就像你说的那样 - “乱序”流ID可能更复杂,因为它需要避免冲突,并且可能消耗更多资源,因为你必须记住正在使用的所有流ID。
我认为没有任何特别的理由指出流ID必须简单地提升。
答案 1 :(得分:2)
6.8。旅途
GOAWAY帧(类型= 0x7)用于启动关机 连接或发出严重错误情况信号。 GOAWAY允许 端点以优雅地停止接受新流,同时仍然 完成先前建立的流的处理。这使 管理操作,例如服务器维护。
在开始新的端点之间存在固有的竞争条件 流和远程发送GOAWAY帧。处理这个 在这种情况下,GOAWAY包含最后一个对等方的流标识符- 发送时已处理或可能已处理的初始流 此连接中的端点。例如,如果服务器发送了 GOAWAY帧,标识的流是编号最高的流 由客户发起。
发送后,发送方将忽略由 如果流的标识符高于包含的标识符,则为接收者 最后一个流标识符。 GOAWAY框架的接收器一定不能打开 连接上的其他流,尽管新连接可以 建立新的流。
如果GOAWAY的接收器以更高的流发送了数据 流标识符,而不是GOAWAY帧中指示的标识符 流没有或将不会被处理。 GOAWAY的接收器 框架可以将流视为从未在其上创建过的流 全部,从而允许这些流稍后在新的流中重试 连接。