每一代 HTTP 解决了什么问题?下图说明了主要特征。
HTTP 1.0 于 1996 年定型并形成完整文档。对同一服务器的每个请求都需要单独的 TCP 连接。
HTTP 1.1 于 1997 年发布。TCP 连接可以保持开放以便重复使用(持久连接),但这并不能解决 HOL(Head of Line)阻塞问题。
HOL 阻塞 - 当浏览器允许的并行请求数用完时,后续请求需要等待前一个请求完成。
HTTP 2.0 于 2 年发布。它通过请求复用解决了 HOL 问题,消除了应用层的 HOL 阻塞,但传输(TCP)层仍存在 HOL。
如图所示,HTTP 2.0 引入了 HTTP “流”的概念:这是一种抽象概念, 允许在同一 TCP 连接上复用不同的 HTTP 交换 。每个流无需按顺序发送。
应用场景:
HTTP 3.0 第一稿于 2020 年发布。它是 HTTP 2.0 的后续版本。它使用 QUIC 代替 TCP 作为底层传输协议,从而消除了传输层中的 HOL 阻塞。
QUIC 基于 UDP。它将流作为一等公民引入传输层。QUIC 流共享同一个 QUIC 连接,因此创建新的 QUIC 流无需额外的握手和慢启动,但 QUIC 流是独立传输的,因此在大多数情况下,影响一个流的数据包丢失不会影响其他流。
应用场景:
© 版权声明