简介

超文本传输协议(HTTP)是一个非常成功的协议。但是 HTTP/1.1 所使用的底层传输(参考 RFC7230 第六节)对现代应用程序的性能产生负面影响。

特别是,HTTP/1.0 只允许在一个 TCP 连接上处理一个请求。HTTP/1.1 添加了请求管道,但这只是部分解决了请求并发问题,仍然会受到队首阻塞的影响。因此客户端需要创建多个连接,才能实现并发请求以降低延迟。

此外,HTTP 报头字段经常重复和冗长,这造成了不必要的网络流量开销,以及初始 TCP 阻塞窗口被快速填满。在一个新的 TCP 连接上进行多个请求时,这可能导致延迟过高。

HTTP/2 在底层连接中,通过定义一个经过优化的 HTTP 语义映射表,来解决这个问题。具体来说,它允许在同一连接上交叉使用请求和响应消息,并使用一个高效率编码的 HTTP 报头字段。它还允许设置请求的优先级,让更多重要的请求更快速的完成,进一步提升性能。

最终协议涉及为对网络更加友好,相较于 HTTP/1.x,可以减少 TCP 连接的个数。这意味着与其他流更少的竞争,以及更长时间的连接,从而更有效的利用可用的网络流量。

最后,HTTP/2 通过使用二进制消息帧,进一步提升了消息处理能力。