1. 引言
使用超文本传输协议 (Hypertext Transfer Protocol, HTTP, [HTTP]) 的应用性能, 与每个 HTTP 版本如何使用底层传输以及传输运行所处的条件相关.
发起多个并发请求可以降低延迟并提升应用性能. 在给定的 TCP [TCP] 连接上, HTTP/1.0 一次只允许一个未完成请求. HTTP/1.1 [HTTP/1.1] 增加了请求流水线, 但这只部分解决了请求并发问题, 并且仍会受到应用层队头阻塞 (head-of-line blocking) 的影响. 因此, HTTP/1.0 和 HTTP/1.1 客户端会使用到服务器的多个连接来发起并发请求.
此外, HTTP 字段 (field) 往往重复且冗长, 会造成不必要的网络流量, 也会使初始 TCP 拥塞窗口迅速填满. 当在新的 TCP 连接上发起多个请求时, 这可能导致过高延迟.
HTTP/2 通过定义 HTTP 语义到底层连接的优化映射来解决这些问题. 具体而言, 它允许同一连接上的消息交错发送, 并对 HTTP 字段使用高效编码. 它还允许对请求进行优先级排序, 使更重要的请求更快完成, 从而进一步提升性能.
与 HTTP/1.x 相比, 由此得到的协议对网络更加友好, 因为可以使用更少的 TCP 连接. 这意味着与其他流的竞争更少, 连接生命周期更长, 进而能够更好地利用可用网络容量. 但请注意, 本协议并未解决 TCP 队头阻塞.
最后, HTTP/2 还通过使用二进制消息分帧 (binary message framing), 使消息处理更加高效.
本文档废止 RFC 7540 和 RFC 8740. Appendix B 列出了值得注意的变更.