跳到主要内容

2. HTTP/2 协议概述 (HTTP/2 Protocol Overview)

HTTP/2 为 HTTP 语义提供了优化的传输方式. HTTP/2 支持 HTTP/1.1 的所有核心功能, 但目标是在多个方面更加高效.

HTTP/2 中的基本协议单元是帧 (frame) (Section 4.1). 每种帧类型都有不同用途. 例如, HEADERS 和 DATA frames 构成 HTTP 请求和响应的基础 (Section 8.1); 其他帧类型, 如 SETTINGS, WINDOW_UPDATE 和 PUSH_PROMISE, 用于支持 HTTP/2 的其他功能.

请求复用 (multiplexing) 是通过将每个 HTTP request/response exchange 关联到各自的流 (stream) (Section 5) 来实现的. 各个流在很大程度上相互独立, 因此某个被阻塞或停滞的请求或响应不会阻止其他流继续前进.

流量控制 (flow control) 和优先级排序 (prioritization) 确保可以高效使用复用流. 流量控制 (Section 5.2) 有助于确保只传输接收方能够使用的数据. 优先级排序 (Section 5.3) 确保有限资源可以优先分配给最重要的流.

HTTP/2 增加了一种新的交互模式, 服务器可以借此向客户端推送响应 (Section 8.2). 服务器推送 (server push) 允许服务器推测性地向客户端发送服务器预期客户端将会需要的数据, 用一定的网络使用量换取潜在的延迟收益. 服务器通过合成一个请求来完成这一点, 并将该请求作为 PUSH_PROMISE frame 发送. 随后, 服务器能够在单独的流上发送对该合成请求的响应.

由于连接中使用的 HTTP header fields 可能包含大量冗余数据, 包含这些字段的帧会被压缩 (Section 4.3). 在常见情况下, 这对请求大小尤其有利, 可以将多个请求压缩进一个数据包.