1. 引言 (Introduction)
超文本传输协议(HTTP)是一个非常成功的协议。然而,HTTP/1.1使用底层传输的方式([RFC7230]的第6节)有几个对当今应用程序性能产生负面影响的特性。
特别是,HTTP/1.0只允许在给定的TCP连接上一次处理一个请求。HTTP/1.1添加了请求管道化(Request Pipelining),但这只能部分解决请求并发性问题,并且仍然受到队头阻塞(Head-of-Line Blocking)的影响。因此,需要多个TCP连接到给定服务器的HTTP/1.0和HTTP/1.1客户端以实现并发并减少延迟。
此外,HTTP头部字段通常是重复和冗长的,导致不必要的网络流量以及导致初始TCP [TCP]拥塞窗口被快速填满。当在新的TCP连接上进行多个请求时,这可能导致过度的延迟。
HTTP/2通过定义优化的HTTP语义到底层连接的映射来解决这些问题。具体来说,它允许在同一连接上交错请求和响应消息,并使用HTTP头部字段的高效编码。它还允许对请求进行优先级排序,让更重要的请求更快速地完成,从而进一步提高性能。
生成的协议对网络更加友好,因为可以使用更少的TCP连接与HTTP/1.x。这意味着与其他流量的竞争减少,以及连接的寿命更长,这反过来又导致更好地利用可用的网络容量。
最后,HTTP/2还通过使用二进制消息帧实现了更高效的消息处理。
核心目标
HTTP/2的设计目标包括:
- 协议协商机制 - 允许客户端和服务器选择使用HTTP/1.1、HTTP/2或其他协议
- 高级别兼容性 - 保持与HTTP/1.1的完整语义兼容性
- 降低延迟 - 通过头部压缩和多路复用来改进页面加载时间
- 支持常见的HTTP用例 - 包括桌面浏览器、移动浏览器、web API、各种HTTP服务器、代理和防火墙
- 实现简单性 - 降低部署和运营的复杂性