HTTP/1 和 HTTP/2 是两种版本的超文本传输协议(HTTP,Hypertext Transfer Protocol),它们用于客户端(如浏览器)和服务器之间传输网页数据。HTTP 是万维网的基础协议,而这两个版本在性能、架构和数据传输机制上有显著的不同。

一、HTTP/1(HTTP/1.0 和 HTTP/1.1)

HTTP/1.0 于 1996 年发布,是最早的 HTTP 版本,但使用时间较短,后来 HTTP/1.1(1997 年发布)成为主流。HTTP/1. x 协议的主要特点和问题包括:

特点:

  1. 文本协议:请求和响应都是以纯文本的形式发送,容易调试和查看。
  2. 单个连接单次请求:HTTP/1.0 是一次请求只使用一个 TCP 连接,请求结束后关闭连接。
  3. 持续连接(Keep-Alive):HTTP/1.1 引入了持续连接的概念,可以在一个 TCP 连接上处理多个请求和响应,从而减少连接的开销。
  4. 分块传输编码:HTTP/1.1 支持传输大文件时不需要提前知道文件的总大小,而是将其分块传输,适合于动态内容生成。
  5. 队头阻塞问题:HTTP/1. x 的每个请求都是依次处理的,前一个请求未完成,后一个请求就必须等待,即“队头阻塞(Head-of-Line Blocking)”问题,影响性能。

主要问题:

  • 多次连接开销:即使在 HTTP/1.1 的持续连接模式下,客户端还是会为多个资源(如 CSS、JavaScript、图片)发起多个连接,导致了资源浪费和延迟。
  • 队头阻塞:每次只能有一个请求处理,其他请求需排队等待,限制了网页加载速度。

二、HTTP/2

HTTP/2 于 2015 年发布,旨在解决 HTTP/1. x 的性能瓶颈,特别是对现代网页大量资源的加载优化。

特点:

  1. 二进制协议:HTTP/2 改变了 HTTP/1. x 的文本传输方式,使用二进制帧传输数据。二进制更高效且便于解析。

  2. 多路复用(Multiplexing):允许多个请求同时通过一个单一的 TCP 连接进行并行传输,解决了 HTTP/1. x 中的队头阻塞问题。每个请求都有唯一的流 ID,不会互相干扰。

  3. 头部压缩:HTTP/2 通过 HPACK 算法对请求和响应头进行压缩,减少了数据传输量,特别是对于包含大量重复信息的请求头(如 Cookie)。

  4. 服务器推送(Server Push):服务器可以在客户端明确请求之前主动推送资源(如 CSS、JavaScript 文件)给客户端,以提高加载效率。

  5. 优先级和依赖性:HTTP/2 允许客户端为请求分配优先级,服务器可以根据优先级优化资源发送顺序。

优势:

  • 减少延迟:由于支持多路复用,多个请求能同时发送,不必等待前一个请求结束,大大提升了网页加载速度。
  • 减少带宽消耗:头部压缩和服务器推送机制可以节省带宽并加快资源传递。
  • 更高效的资源利用:通过在同一连接上发送多个请求,减少了连接管理的开销。

三、HTTP/1 和 HTTP/2 的核心区别

特性HTTP/1.1HTTP/2
数据格式文本二进制
并行请求不支持多路复用,队头阻塞支持多路复用,避免队头阻塞
头部压缩使用 HPACK 压缩
服务器推送支持服务器主动推送资源
连接复用多个 TCP 连接一个 TCP 连接内复用多个流

四、应用场景

  • HTTP/1.1 仍在许多较老的系统中使用,特别是在支持和性能要求不高的场景。
  • HTTP/2 更适用于现代网站,尤其是需要加载大量资源(如图片、CSS、JS)的应用。它在高性能环境下优势明显,比如大型电子商务网站或社交平台。