你们公司还没使用HTTP3?赶紧来补一补,学习一下如何在Nginx上配置HTTP3。

你们公司还没使用HTTP3?赶紧来补一补,学习一下如何在Nginx上配置HTTP3。

 

NGINX最新版本,已提供对 QUIC 和 HTTP/3的支持,本文介绍一下如何安装与配置

 

很高兴能在一个特殊的开源存储库中发布NGINX的QUIC+HTTP/3技术预览版。这是基于IETF QUIC 草稿的预发行版软件,维护在开发分支中,与稳定分支和主线分支隔离。该版本是几个月前才启动开发的,现在已准备好进行互操作性测试、反馈和代码贡献。

 

使用 NGINX QUIC+HTTP/3 实现启用的演示站点可在https://quic.nginx.org/。

 

了解 HTTP/3 协议

在这个快节奏的世界中,超文本传输协议 (HTTP) 在二十多年里一直非常稳定。HTTP/1.1 标准于 1999 年发布,已成为 Web 应用程序和 API 无处不在的传输协议。尽管用于传输的应用程序和服务发生了巨大变化,但该协议在未来 21 年内保持不变。

此时,精明的读者可能会问,"但HTTP/2呢?这是一个很好的问题。HTTP/2 标准于 2015 年发布,并稳步采用,45% 的面向 Internet 的网站支持 HTTP/2。然而,这个统计数据掩盖了这样一个现实,就是在公共 Internet 上使用 HTTP与"最后一英里"(运行时基础结构)相比,HTTP 的使用大不相同。

现代互联网基础设施的现实是 HTTP/2 很少被端到端部署。它旨在解决在公共 Internet 上最明显的问题,其中延迟过高,并且一个 HTTP 请求的问题可能会延迟后续请求。在应用程序运行时环境中(例如,公共云或私有数据中心)延迟较低,网络可靠性极佳,直接检查 HTTP/1.1 基于文本的传输流的能力比 HTTP/2 的二进制传输流的效率更有价值。

HTTP/2 在很大程度上改善了浏览器和移动设备上的用户体验,因为它非常适合客户端和运行时基础结构的"边缘"之间的环境。此时,它通常被代理到使用 HTTP/1.1 的运行时环境中。边缘最有可能是 CDN 提供程序,或处理进入运行时环境的流量的反向代理负载均衡器。

 

HTTP 版本的典型混合部署

这种使用 HTTP/2 和 HTTP/1.1 来提供网站和应用程序的混合方法效果很好。那么,为什么要提出另一个新协议,HTTP/3呢?

 

HTTP/2 的主要创新是通过使用 TCP 作为低延时传输的通过单个HTTP连接进行多路复用以传输多个 HTTP 请求。不幸的是,TCP 具有固有的限制,限制了网站和应用程序的性能和用户体验。TCP 标准最初于 1981 年发布,作为通用传输协议非常成功。但是,当您在同一连接上多路复用多个独立请求时,它们都受该连接的可靠性影响。如果只有一个请求的数据包丢失,则所有多路复用请求将延迟,直到首先检测到丢失的数据包,然后重新传输。

 

HTTP/3 基于QUIC传输协议,该协议专门设计用于支持多路复用连接,而不受单个 TCP 连接。相反,QUIC 使用 UDP作为在客户端和服务器之间移动数据包的低延时传输机制,并实现发出 HTTP 请求的可靠连接。值得注意的是,QUIC 还将 TLS 作为整体组件,而不是作为 HTTP/1.1 和 HTTP/2 的附加层。

 

QUIC协议

QUIC 的目标是为 HTTP/3 提供高性能、高可靠性、高安全性的传输协议(尽管 QUIC 也适用于非 HTTP 流量)。从语义上讲,HTTP/3 本身与 HTTP/2 非常相似。但是,没有 HTTP 协议同时支持一个或多个 HTTP/1.1、HTTP/2 和 HTTP/3。客户端(Web 浏览器)如何知道要使用的 HTTP 版本?

 

版本控制问题首先出现在 HTTP/2 的引入中,HTTP/2 通过使用 TLS 握手来检测客户端和服务器是否能够通过 HTTP/2 进行通信,从而解决了该问题。这样,客户端知道如何在建立连接之前与服务器通信。但是,QUIC 使用 UDP 而不是 TCP 作为基础传输协议带来了新的挑战 - 客户端如何知道最初请求哪种类型的连接,TCP 或 UDP?该解决方案是客户端为初始 HTTP 请求建立 TCP 连接。支持 HTTP/3 的服务器的响应包括Alt-Svc 标头,用于指定它侦听 HTTP/3 流量的 UDP 端口。此外,浏览器还记住哪些站点支持 QUIC,以消除基于 Alt-Svc+ 的发现方法的开销。

 

NGINX QUIC+HTTP/3 预览

今天,我们宣布NGINX的官方QUIC和HTTP/3实施的初始版本,http_v3_module。这是一个技术预览,必须被认为是实验性的 - 它不是用于生产用途。在编写本文时,QUIC 标准尚未最终确定,并且此初始版本针对当前草稿的子集实现。

经过几个月的设计和开发,http_v3_module已准备好进行互操作性测试。我们也欢迎一般的反馈和代码贡献。请注意,http_v3_module在 NGINX 开源主线开发分支中不可用(也未提供 NGINX Plus 的任何版本);因为它仍然是实验性的,所以在一个专门的开发分支https://hg.nginx.org/nginx-quic。

另请注意,此 QUIC+HTTP/3 实现是全新的,与 Cloudflare 在其 quiche 项目中提供的修补程序无关

对于熟悉 NGINX 配置的人,启用 QUIC+HTTP/3 非常简单。

server {
    listen 443 ssl;              # TCP listener for HTTP/1.1
    listen 443 http3 reuseport;  # UDP listener for QUIC+HTTP/3

    ssl_protocols       TLSv1.3; # QUIC requires TLS 1.3
    ssl_certificate     ssl/www.example.com.crt;
    ssl_certificate_key ssl/www.example.com.key;

    add_header Alt-Svc 'quic=":443"'; # Advertise that QUIC is available
    add_header QUIC-Status $quic;     # Sent when QUIC was used
}

有关从nginx-quic 存储库构建 NGINX以及建议配置的信息,请参阅README。此外,在 http_v3_module 上https://quic.nginx.org/。从这里,您可以检查您的浏览器是否已经支持QUIC,并将HTTP/3互操作性与您自己的nginx-quic 版本进行比较

鉴于 QUIC 的草稿状态,您可能需要使用开发版本或通用浏览器的最新版本来启用 QUIC 连接。

 

翻译来源:https://www.nginx.com/blog/introducing-technology-preview-nginx-support-for-quic-http-3/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值