HTTP/3是Web的未来吗?

如果没有我们的老朋友超文本传输​​协议 (HTTP),我们所知道的网络就不会存在。最新的版本 HTTP/3 有望彻底改变我们与网络交互的方式。在本文中,我们将深入研究 HTTP/2 和 HTTP/3 之间的差异,研究为什么 TCP 受到 QUIC 的青睐,并探讨 HTTP/3 的一些优势。

什么是 HTTP/3?

在我们深入了解新事物之前,可能需要先了解一些历史。HTTP 是一种请求-响应协议,这意味着客户端(通常是 Web 浏览器)向服务器发送请求,服务器用请求的信息进行响应。

HTTP/1.1 是 HTTP 的第一个标准化版本,发布于 1997 年。它定义了 Web 通信的基本规则和标准,包括请求-响应模型、HTTP 方法(如 GET、POST、PUT 和 DELETE)、和 HTTP 标头。HTTP/1.1 还引入了持久连接和管道的概念,持久连接允许通过单个连接发送多个请求和响应,管道允许在第一个请求得到答复之前发送第二个请求。

HTTP/2 于 2015 年发布,是 HTTP 的重大修订,引入了多路复用,允许通过单个连接同时发送多个请求和响应,从而减少建立和关闭连接的开销。HTTP/2 还引入了标头压缩,减少了 HTTP 标头的大小并缩短了页面加载时间。

HTTP/2 向后兼容 HTTP/1.1,这意味着客户端和服务器可以使用任一标准进行通信。HTTP/3 的情况并非如此。它不向后兼容 HTTP/2。为了理解其中的原因,我们必须更深入地研究这些协议。

HTTP 的结构如何

HTTP/3是Web的未来吗? - 悦略设计

HTTP 可能代表“超文本传输​​协议”,但它只是一个协议,就像 Voltron 是一个机器人一样。就像五个狮子机器人组合在一起组成一个更大、更强大的机器人一样,HTTP 结合了多种协议来完成工作。

HTTP 的每个版本都依赖于协议的组合,每个协议都有不同的职责。

传输层安全协议

传输层安全性 (TLS) 是 HTTP/2 和 HTTP/3 堆栈的一部分,是一种加密协议,用于通过网络提供端到端安全性。应该指出的是,TLS 实际上并不保护两端系统上的任何数据,而是专注于防止数据传输时被窃听或更改。TLS 是安全套接字层 (SSL) 协议的后继版本,其最后一个版本已于 2015 年弃用。等等,这是否意味着我们应该将 SSL 证书称为 TLS 证书?

HTTP/2 使用 TLS 进行身份验证、密钥协商、会话恢复/0-RTT 和加密解密。它仍然完成 HTTP/3 中的大部分工作,但加密/解密除外,这是由 QUIC 处理的。

TCP

传输控制协议 (TCP) 是一种传输层协议,用于确保 IP 网络上的可靠通信。它是一种面向连接的协议,这意味着在发送数据之前,发送方和接收方之间建立了连接。此连接在整个通信期间保持不变,并且发送方和接收方都必须确认发送的数据。

TCP 用于确保数据以正确的顺序可靠地传送。它使用序列号来跟踪发送的数据包,并且可以重新发送丢失或损坏的数据包。TCP还提供流量控制和拥塞控制,这有助于防止网络拥塞并确保接收方能够处理正在发送的数据量。

TCP 是 HTTP/2 的一部分,但不在 HTTP/3 堆栈中。QUIC 处理 TCP 在 HTTP/2 中所做的大部分工作,但端口号除外。在 HTTP/3 中,这是通过 UDP 完成的。

QUIC

快速 UDP Internet 连接 (QUIC) 是 Google 开发的传输层协议,旨在取代 TCP 成为用于 Web 流量的主要协议,其设计比 TCP 更高效、更安全。HTTP/3 中的大部分新功能实际上都归结为 QUIC,因为它克服了TCP 的限制。

QUIC 使用面向连接的方法,类似于 TCP,但它的设计更加轻量级和高效。它在发送数据之前在客户端和服务器之间建立连接,但它不使用与 TCP 相同的握手协议。相反,QUIC 使用零往返 (0-RTT) 握手,它结合了传输和加密握手。这减少了建立连接的延迟,使 QUIC 比 TCP 更快。

UDP

用户数据报协议 (UDP) 是一种传输层协议,用于在网络上的设备之间发送数据报(数据包)。它是一种无连接协议,这意味着它在发送数据之前并不在发送方和接收方之间建立连接。相反,发送方只是将数据报发送到接收方,而接收方并不确认收到数据报。与 QUIC 一样,UDP 不存在于 HTTP/2 堆栈中。

TCP 的局限性

TCP 有一些限制,使其不太适合现代网络,特别是对于需要低延迟的应用程序,例如实时视频流或在线游戏。

TCP 需要大量开销来维护连接并确保数据的可靠传输。该开销包括确认消息、丢失数据包的重传以及拥塞控制机制。这种开销会显着增加延迟并降低连接的整体性能。

TCP 最大的缺点之一是,在某些方面,它仍然像 1999 年一样。TCP 基本上加载页面,就好像它们是单个 HTML 文件一样,可能带有一些图像和一些嵌入的 CSS。另一方面,现代页面可能包含数百个文件。

多年来,人们进行了大量更新 TCP 的尝试,但最终发现修补是不够的,这导致了 QUIC 的发展。

TLS 和 QUIC 在 HTTP/3 中如何工作

HTTP/3 仍然使用 TLS,但它的工作方式与 HTTP/2 略有不同,将其部分职责转移到 QUIC。下面是 HTTP/3 中 TLS 和 QUIC 的不同角色和职责的快速细分。

  1. 加密/解密:TLS 不用于 HTTP/3 中的加密/解密,因为 QUIC 为通过连接发送的所有数据提供端到端加密。QUIC采用ChaCha20-Poly1305加密算法,比TLS中使用的加密算法更加高效和安全。
  2. 身份验证:HTTP/3 中使用 TLS 进行身份验证,提供一种安全的方式来验证服务器和客户端的身份。QUIC 不提供身份验证功能。
  3. 密钥协商:TLS 用于 HTTP/3 中的密钥协商,允许客户端和服务器就用于加密的共享密钥达成一致。
  4. 会话恢复/0-RTT:TLS 用于 HTTP/3 中的会话恢复和 0-RTT,允许客户端和服务器恢复先前建立的连接,而无需完全握手。
  5. 拥塞控制:QUIC负责HTTP/3中的拥塞控制,使用自己的拥塞控制算法来管理数据流并防止网络拥塞。
  6. 可靠性:QUIC 负责 HTTP/3 的可靠性,确保数据以正确的顺序正确传送。在 HTTP/2 中,这是由 TCP 处理的。
  7. 连接定向:QUIC 负责 HTTP/3 中的连接定向,管理连接的建立和拆除。
  8. 连接迁移:QUIC 负责 HTTP/3 中的连接迁移。HTTP/2 中不存在此功能。

连接迁移的工作原理

连接迁移是 HTTP/3 中的一项功能,支持网络更改而无需发送另一次握手。每个 QUIC 数据包标头都附加有一个未加密的连接标识符 (CID),因此切换到新网络不需要重置连接。这允许连接以 TCP 无法完成的方式更改网络和 IP 地址。

例如,在 HTTP/3 下,正在进行的下载不会因网络变化而中断。它只是不断滚动,在网络可用时平滑地切换网络。

QUIC 使用称为可链接性预防的功能来确保未加密的 CID 无法通过监控各种网络上的 CID 来实际跟踪某人。连接 ID 列表。所有映射到同一连接的都是随机生成的,并在会话开始时由客户端和服务器商定。每次发生网络更改时,都会使用列表中的新 CID。这可以防止不同的网络链接到同一用户。

QPACK 对比 HPACK

HPACK 用于 HTTP/2 中,旨在压缩 HTTP/2 请求和响应的标头。它的工作原理是结合使用霍夫曼编码和基于字典的压缩来对标头进行编码。HPACK 使用经常使用的标头字段和值的静态字典,它还可以为每个连接创建动态字典。

HTTP/3 中使用的 QPACK 与 HPACK 类似,它也使用霍夫曼编码和基于字典的压缩的组合。然而,QPACK 有一些关键的区别:

  1. QPACK 对所有连接使用单个共享字典,而 HPACK 对每个连接使用单独的字典。
  2. QPACK 通过使用更先进的编码方案(称为“快速编码”)来更有效地压缩标头,该方案可以用单个字节对标头进行编码。
  3. QPACK还支持更先进的压缩技术,例如头表本身的压缩,这可以进一步减小压缩头的大小。
  4. QPACK 的设计比 HPACK 更高效、更快,因为它使用更高效的编码方案,并且压缩和解压缩标头所需的计算更少。
  5. QPACK 也比 HPACK 更灵活,因为它允许对压缩设置进行更多自定义,并且可以与不同的传输协议一起使用。

与 HPACK 相比,QPACK 提供更好的压缩比、更快的压缩和解压缩速度以及更大的灵活性。

HTTP/2 与 HTTP/3:性能比较

HTTP/2 和 HTTP/3 都是为了提高 Web 性能而设计的,但它们的实现方式不同。

延迟

由于其零往返 (0-RTT) 握手和更快的连接建立,HTTP/3 的延迟低于 HTTP/2。这意味着 HTTP/3 可以比 HTTP/2 更快地发送和接收数据,从而实现更快的页面加载时间。

吞吐量

HTTP/3 具有比 HTTP/2 更高的吞吐量,因为它能够通过单个连接复用多个请求和响应。这意味着 HTTP/3 可以同时发送和接收多个请求和响应,从而提高整体性能。

资源利用

HTTP/3 的设计初衷是在资源利用方面比 HTTP/2 更加高效。HTTP/3 使用一种更新且更高效的加密算法,称为“ChaCha20-Poly1305”,该算法比 HTTP/2 中使用的加密算法更高效。此外,HTTP/3 的多路复用功能可以更好地利用资源,因为可以通过单个连接发送和接收多个请求和响应。

服务器推送

HTTP/3 支持服务器推送,这允许服务器主动向客户端发送资源,即使客户端尚未请求它们。这可以加快页面加载时间并提高性能。HTTP/2 还支持服务器推送,但 HTTP/3 的实现允许客户端设置可接受的推送数量,从而防止浪费带宽。

优先级

与 HTTP/2 相比,HTTP/3 可以更好地确定请求和响应的优先级。HTTP/3 的多路复用功能可以更好地确定请求和响应的优先级,因为可以首先发送和接收最重要的请求和响应。

总结

根据 [W3Techs](https://w3techs.com/technologies/details/ce-http3),HTTP/3 的使用率在过去一年中一直在缓慢上升,目前约有 27% 的网站在使用。

TCP 具有 QUIC 所没有的局限性,包括启动时间慢、开销高、可扩展性有限以及无法处理大量并发连接。相比之下,QUIC 的设计就是为了解决这些限制。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部