“流”是HTTP/2连接中客户端和服务端之间交换的独立的、双向的帧序列。流具有以下几个重要特性:
- 一个单独的HTTP/2连接能够包含多个同时打开的流,流的两个端点从多个流中交叉存取帧。
- 流可以被客户端或服务端单方面建立和使用,也可以被客户端和服务端共享。
- 流可以被任意一端关闭。
- 帧在流上发送的顺序很重要。接收方按照收到帧的顺序处理帧。特别地,HEADER和DATA帧的顺序在语义上是重要的。
- 流以一个整数标识。流的标识符是由初始化流的一端分配的。
下图展现了一个连接上多个流的传输情况:
(注:图片来自https://www.nginx.com/wp-content/uploads/2015/09/NGINX_HTTP2_White_Paper_v4.pdf)
可以看到,一个“连接”内包含多个流,每个“流”上可以单独地传输请求和响应信息,信息在“流”上是以“帧”的形式传输的。
流的生命周期和状态转换
流的生命周期如下图所示:
其中,HEADERS帧可以是一个单独的HEADERS帧,也可以是一个HEADERS帧以及紧随它的若干个CONTINUATION帧;