Skip to content

HTTP3是什么

HTTP3实际上指的是QUIC,是Quick UDP Internet Connections的缩写。QUIC是一种传输层协议,目的是为了提升当前使用TCP 的面向连接的Web 应用程序的性能,因为其使用UDP协议传输,所以大大降低了每次请求握手的消耗,该协议偶尔获得“TCP/2”的绰号。简言之,QUIC是一种基于 UDP 的流复用加密传输协议
QUIC 的次要目标包括减少连接和传输延迟,以及在每个方向上估计带宽以避免拥塞。并且对于HTTP2也能兼容,早期主要由Chrome进行支持,现在Safari,Firefox,Edge等主流浏览器都已支持。在谷歌的生态中,超过一般的Web引用都已经支持QUIC,直到 2018 年 10 月,IETF 的 HTTP 和 QUIC 工作组联合决定将 QUIC 上的 HTTP 映射称为“ HTTP/3 ”,以便将其作为全球标准。
在支持加密 HTTP流量的背景下,QUIC 的作用与 TCP 类似,但在连接建立期间延迟更低,并且在通过单个连接多路复用多个 HTTP 流时,丢失恢复效率更高。它主要通过两项依赖于对 HTTP 流量行为的理解的改变来实现这一点。
HTTP3对于应用中的响应消息,请求消息,请求行等数据几乎不变,主要的变化是在传输层,所以开发者对于HTTP3的兼容适配改动不大,除了对部分特性的使用。现有的网站和服务可以逐步迁移到HTTP/3。

image

服务器软件支持

Nginx 从版本 1.25.0 开始支持 QUIC 和 HTTP/3。要在 Nginx 中启用这些功能,可以通过编译时使用特定的配置参数来实现。例如,可以使用 --with-http_v3_module 配置参数来启用 QUIC 和 HTTP/3 支持。为了构建支持 QUIC 的 Nginx,建议使用提供 QUIC 支持的 SSL 库,如 BoringSSL、LibreSSL 或 QuicTLS。如果没有使用这些库,将使用不支持早期数据的 OpenSSL 兼容层。
配置方面,Nginx 的 listen 指令在 ngx_http_core_module 模块中新增了一个 quic 参数,用于在指定端口上启用 HTTP/3 over QUIC。此外,还可以指定 reuseport 参数,以使其与多个工作者一起正常工作。QUIC 要求使用 TLSv1.3 协议版本,这是通过 ssl_protocols 指令默认启用的。
不过目前Caddy在HTTP3支持中也成为主流的服务器软件并具有很好的支持。Caddy 可以通过在其配置文件中设置 experimental_http3 参数来启用对 HTTP/3 的支持。此外,您还需要配置 TLS 以使用 TLS 1.3,因为 HTTP/3 默认使用 TLS 1.3 进行加密。

json
{
  "http_port": 81,
  "servers": {
    "protocol": {
      "experimental_http3": true
    }
  }
}

安全性

相对于HTTP2,HTTP3在安全性方面有了很大的提升。HTTP3使用TLS1.3作为加密层,并且使用0-RTT(零往返时间)和1-RTT(一次往返时间)来传输数据。
HTTP3提供了加密认证的报文,因此它能够更好地防止中间网络设备的篡改、注入和窃听。

连接复用

HTTP/2 通过多路复用技术可以在同一个 TCP 连接中发送多个逻辑数据流,而 QUIC 基于 UDP 实现,使用 UDP 端口号来识别指定机器上的特定服务器,因此它不需要进行三次握手,并且可以更好地支持连接迁移。

纠错能力

由于 UDP 不需要客户端-服务器连接,因此它有助于通过最优路由传递数据。但是,这种方法没有数据重传机制,因此通常会导致数据包丢失。QUIC 通过更高级别的多路复用连接(以便同时独立地传输多个数据流)解决了这个问题,并防止一个流中的数据包丢失影响其他流。
QUIC 具有向前纠错的能力,它通过在每个数据包中包含部分其他数据包的数据来实现冗余校验,当出现丢包时,接收端可以通过其他包的数据组装出丢失的数据包内容。
QUIC 提供从服务器和客户端两个方向的带宽估算,以确定网络在给定会话内可以传输多少数据,以及前向纠错 (FEC) 功能(通过 FEC 数据包)以防止不稳定网络环境中的错误,从而进一步提高性能。

拥塞控制

HTTP/3 通过减少建立连接所需的握手次数来建立高效连接并减少延迟。在 HTTP/2 中,建立连接涉及客户端和服务器之间的一系列握手。这些握手引入了额外的往返,增加了建立连接的延迟。
HTTP/3 中的连接 ID (CID) 功能简化了客户端切换网络或设备时的迁移。借助 CID 功能,客户端可以保持稳定的连接,而无需进行新的握手。CID 的工作原理是为每个连接分配一个唯一的标识符,当客户端切换网络或设备时,它只需更新与连接相关的网络信息,同时保持相同的 CID。
QUIC 改进了 TCP 的拥塞控制机制,采用了一种新的拥塞控制算法,能够更好地适应现代网络环境。QUIC协议允许在同一个连接上并发传输多个数据流,即使其中一个数据流出现丢包,也不会影响其他数据流的传输。

image

会话恢复/0-RTT

会话恢复涉及重新使用先前交换中使用的参数,而无需重新启动完整握手。在 HTTP/2 中,会话恢复是使用 TLS 会话票证机制实现的,其中重新连接之前至少需要两轮握手(TCP 和 TLS)。另一方面,HTTP/3 利用 QUIC 的 0-RTT(零往返时间恢复)功能,该功能使客户端能够在握手的第一个数据包中发送加密数据,从而可以更快地恢复先前的会话。

现实中实施的挑战

要切换到 HTTP/3,您必须修改现有的基础设施,包括服务器和负载平衡器。即使切换后,兼容性仍然是一个挑战,特别是如果您的组织规模较大且/或网络设置复杂。
HTTP/3 使用的 QUIC 传输协议会加密整个数据包,从有效载荷到元数据。加密虽然有好处,但也使访问数据包变得困难。然而,防火墙需要访问数据包;如果无法访问数据包,客户端就会面临网络攻击。
与现有 HTTP/2 或 HTTP/1.x 实现的兼容性是另一个挑战。兼容性对于跨不同协议无缝传输请求至关重要——在逐步向 HTTP/3 过渡期间尤其重要。虽然可能,但在不中断现有服务和连接的情况下执行切换很困难,尤其是在非浏览器客户端中,部分请求库对HTTP3的兼容可能处于待开发或者支持不完整的状态。
更加昂贵的CDN价格,有的CDN服务商针对QUIC的请求进行单独计费,这样的兼容导致HTTP3的推广和应用成本增加。

兼容性

尽管HTTP/3在底层进行了重大更改,但它仍然与HTTP/1.1和HTTP/2保持兼容,这意味着现有的网站和服务可以逐步迁移到HTTP/3。

仅用于培训和测试,通过使用本站代码内容随之而来的风险与本站无关。版权所有,未经授权请勿转载,保留一切权利。
ICP备案号:滇ICP备15009214号-13   公安网备:滇公网安备 53312302000061号