超文本传输协议(HTTP)获得了巨大的成功。然而, HTTP/1.1使用底层传输通道(见RFC 7230 第六章)的方式有几个特性给今天的应用程序性能带来了整体的负面效果。
尤其是对于一个给定的TCP连接,在同一时间内,HTTP/1.0只允许进行一个请求。虽然HTTP/1.1增加了管道,但这也仅仅部分解决了请求并发问题,而且仍然存在报头阻塞的问题。因此,为了实现并发性,进而减少服务器的延迟,使用HTTP/1.0和HTTP/1.1协议的客户端需要同时与服务端建立多个连接。
此外,HTTP报头通常重复而冗长,这将产生不必要的网络流量,并且会快速填满初始TCP拥塞窗口。当多个请求在同一个新建的TCP连接上发起时,将会产生过多的等待延迟。
HTTP/2通过定义一个优化的HTTP语义到底层连接的映射来解决这些问题。具体来说,它允许请求和响应交错地使用同一个连接,并可以使用高效编码的HTTP报头。它还允许请求具有优先级,让更重要的请求更快速地完成,这进一步提高了性能。
由此产生的协议对网络更加友好,因为相比HTTP/1.x它可以使用更少的TCP连接来完成同样的功能。这意味着流量的竞争更少,连接的生命周期更长。这就能更好地利用现有的网络容量。
此外,通过使用二进制消息帧,HTTP/2也能更有效地处理消息。