Cloudflare 在 NGINX 中实现了支持 HTTP/3 的模块

云耀公司 准备好的 在 NGINX 中提供对 HTTP/3 协议的支持。 该模块被设计为 Cloudflare 开发的库的附加组件 蛋饼 QUIC 和 HTTP/3 传输协议的实现。 乳蛋饼代码是用 Rust 编写的,但 NGINX 模块本身是用 C 编写的,并使用动态链接访问库。 动态 打开 在 BSD 许可下。

要组装,只需下载 补丁 到 nginx 1.16 和 quiche 库,然后使用选项“—with-http_v3_module —with-quiche=../quiche”重建 nginx。 构建时,TLS 支持应基于 BoringSSL 库(“--with-openssl=../quiche/deps/boringssl”),尚不支持使用 OpenSSL。 要接受连接,您需要将带有“quic”标志的监听指令添加到设置中(例如,“listen 443 quic reuseport”)。

在客户端软件中,HTTP/3 支持已添加到 Chrome Canary 和 curl 实用程序的实验版本中。 在服务器端,到目前为止,有必要使用单独的、有限的 测试实施。 在 nginx 中处理 HTTP/3 的能力将显着简化支持 HTTP/3 的服务器的部署,并使新协议的测试实现更加容易。 nginx 中对 HTTP/3 标准支持的出现 预计 在 1.17.x 分支中持续 6-12 个月。

回想一下,HTTP/3 标准化了 QUIC 协议作为 HTTP/2 传输的使用。 协议 QUIC (快速 UDP 互联网连接)由 Google 自 2013 年起开发,作为 Web 的 TCP+TLS 组合的替代方案,解决了 TCP 连接建立和协商时间长的问题,并消除了数据传输过程中数据包丢失时的延迟。 QUIC是UDP协议的扩展,支持多个连接的复用,并提供相当于TLS/SSL的加密方法。

产品特点 快速:

  • 类似于 TLS 的高安全性(本质上 QUIC 提供了通过 UDP 使用 TLS 的能力);
  • 流量完整性控制,防止丢包;
  • 能够立即建立连接(0-RTT,在大约 75% 的情况下,可以在发送连接建立数据包后立即传输数据)并在发送请求和接收响应之间提供最小的延迟(RTT,往返时间);
  • 重传数据包时不使用相同的序列号,这可以避免识别接收到的数据包时出现歧义并消除超时;
  • 数据包丢失仅影响与其关联的流的传送,并且不会停止通过当前连接传输的并行流中数据的传送;
  • 纠错功能可最大限度地减少因重传丢失数据包而导致的延迟。 在数据包级别使用特殊的纠错码可以减少需要重传丢失的数据包数据的情况。
  • 密码块边界与QUIC数据包边界对齐,减少丢包对后续数据包内容解码的影响;
  • 不存在TCP队列阻塞的问题;
  • 支持连接标识符,减少移动客户端重新建立连接的时间;
  • 连接高级连接拥塞控制机制的可能性;
  • 采用单向吞吐量预测技术,确保数据包以最佳速率发送,防止数据包拥塞而导致丢包;
  • 可感知的 发展 与 TCP 相比的性能和吞吐量。 对于 YouTube 等视频服务,QUIC 已被证明可以将观看视频时的重新缓冲操作减少 30%。
  • 来源: opennet.ru

添加评论