Skip to content

http1.1 的持久连接和 http2 的多路复用有什么区别?

参考答案:

HTTP/1.1 的持久连接和 HTTP/2 的多路复用都是为了解决 HTTP 请求和响应的性能问题,但它们的实现方式和解决问题的角度有所不同。下面是它们的主要区别:

1. HTTP/1.1 持久连接(Persistent Connections)

持久连接的特点

  • 定义:HTTP/1.1 引入了持久连接(也称为长连接),允许在一个 TCP 连接上复用多个 HTTP 请求和响应。这意味着在同一个 TCP 连接上,客户端可以发送多个请求,而不需要为每个请求重新建立连接。
  • 实现:通过在 HTTP 头部中设置 Connection: keep-alive 实现。
  • 性能:减少了建立和关闭 TCP 连接的开销,提高了传输效率,减少了延迟。

存在的问题

  • 队头阻塞(Head-of-Line Blocking):在 HTTP/1.1 中,多个请求在同一个连接上按顺序处理,这意味着一个请求的延迟可能会阻塞后续请求的处理。即使有持久连接,队头阻塞问题依然存在。

2. HTTP/2 多路复用(Multiplexing)

多路复用的特点

  • 定义:HTTP/2 引入了多路复用(multiplexing),允许在一个单独的 TCP 连接上并发地发送多个请求和响应,而不会发生阻塞。每个请求和响应被分解为多个帧(frames),这些帧可以交错地在一个连接上发送和接收。
  • 实现:HTTP/2 使用二进制协议,将消息和头部信息分解为帧,帧之间通过流(streams)进行标识。每个流都有一个唯一的标识符,帧被标记为属于特定流。
  • 性能:通过避免队头阻塞和减少连接的开销,提高了并发性和传输效率。即使一个流的请求延迟,其他流的请求和响应可以继续处理。

优势

  • 避免队头阻塞:HTTP/2 的多路复用机制允许并行处理多个请求和响应,避免了 HTTP/1.1 中的队头阻塞问题。
  • 更高效的头部压缩:HTTP/2 使用 HPACK 头部压缩算法,减少了头部信息的冗余,进一步提高了性能。
  • 更低的延迟:通过减少请求和响应的开销,HTTP/2 可以减少页面加载的延迟。

题目要点:

  • HTTP/1.1 持久连接

    • 复用方式:在一个 TCP 连接上复用多个请求和响应。
    • 问题:存在队头阻塞问题,一个请求的延迟会影响后续请求。
  • HTTP/2 多路复用

    • 复用方式:在一个 TCP 连接上并发地发送和接收多个请求和响应,通过帧和流进行标识和管理。
    • 优势:避免了队头阻塞,提高了并发性和传输效率,同时提供了更高效的头部压缩。

HTTP/2 的多路复用显著改进了性能,特别是在高延迟网络和需要大量并发请求的场景中,相比于 HTTP/1.1 的持久连接,HTTP/2 提供了更高效和更快的网络通信能力。