流的标识符

流用无符号的31位整数标识。

  • 客户端发起的流必须使用奇数流标识符
  • 由服务器发起的必须使用偶数流标识符

连接控制消息使用零(0x0)的流标识符;零流标识符不能用于建立新的流。

被升级到HTTP/2的HTTP/1.1请求以流标识符(0x1)响应。升级完成后,对于客户端来说流0x1是“half-close(local)” 。因此,流0x1不能被从HTTP/1.1升级的客户端选择为新的流标识符。

新建立的流的标识符必须在数字上大于发起端点已经打开或保留的所有流。这将控制使用 HEADERS 帧打开的流和使用 PUSH_PROMISE 保留的流。接收到意外流标识符的端点必须响应PROTOCOL_ERROR类型的连接错误。

新流的标识符的第一次使用隐式地关闭了所有由该对端以低值流标识符发起的处于“idle”状态的流。例如,如果客户端在流7上发送 HEADERS 帧而没有在流5上发送帧,则当流7的第一帧被发送或接收时,流5转换到“closed”状态。

流标识符不能被重用。长时间连接会导致端点耗尽流标识符的可用范围。无法建立新流标识符的客户端可以为新流建立新连接。无法建立新流标识符的服务器可以发送GOAWAY帧,以便强制客户端为新流打开新连接。