Skip to main content

1. Introduction (简介)

使用超文本传输协议 (HTTP, [HTTP]) 的应用程序性能与每个HTTP版本如何使用底层传输以及传输运行的条件相关联。

发起多个并发请求可以减少延迟并提高应用程序性能。HTTP/1.0只允许在给定的TCP [TCP] 连接上一次只有一个请求未完成。HTTP/1.1 [HTTP/1.1] 添加了请求流水线 (Request Pipelining),但这只是部分解决了请求并发问题,并且仍然受到应用层队头阻塞 (Head-of-Line Blocking) 的影响。因此,HTTP/1.0和HTTP/1.1客户端使用到服务器的多个连接来发起并发请求。

此外,HTTP字段通常是重复和冗长的,导致不必要的网络流量以及导致初始TCP拥塞窗口快速填满。当在新的TCP连接上发起多个请求时,这可能导致过度的延迟。

HTTP/2通过定义HTTP语义到底层连接的优化映射来解决这些问题。具体来说,它允许在同一连接上交错消息 (Interleaving of Messages),并对HTTP字段使用高效编码 (Efficient Coding)。它还允许请求优先级排序 (Prioritization of Requests),让更重要的请求更快完成,从而进一步提高性能。

与HTTP/1.x相比,生成的协议对网络更友好,因为可以使用更少的TCP连接。这意味着与其他流的竞争更少,以及更长寿命的连接,这反过来又导致更好地利用可用网络容量。但是请注意,此协议并未解决TCP队头阻塞问题。

最后,HTTP/2还通过使用二进制消息帧 (Binary Message Framing) 实现了更高效的消息处理。

本文档废弃了RFC 7540和RFC 8740。附录B列出了显著的变更。