超文本传输协议(HTTP)是一个非常成功的协议。但是,HTTP/1.1使用下层传输层([RFC7230],第6章)的方式所具有的一些特性,对如今的应用层性能产生了一个全面的消极的影响。
尤其是,在一个给定的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也能更有效地处理消息。