之前逛杜老师博客的时候发现底部有一个HTTP3标志,勾起了我对HTTP3的好奇心。简单来说HTTP3就是一个基于UDP的传输方式,致力于提升速度减少握手。

HTTP/3的优势解析

随着互联网的发展,HTTP协议也在不断升级,最新的HTTP/3就是一个大升级版本。相比之前的HTTP/1.1和HTTP/2,它在速度、安全性和用户体验上都大有改进。今天我们来聊聊HTTP/3为什么这么厉害,以及它是怎么一步步成了下一代网络主力的。

HTTP/3的背景故事

HTTP/3是基于一种叫QUIC的协议开发的,说白了,QUIC是一个建立在UDP上的“超级连接”协议。以前的HTTP主要靠TCP在传输,而TCP虽然老牌可靠,但它速度不算快,还有些毛病,比如慢启动、多次握手啥的。Google早就看不下去了,就搞了这个QUIC,解决TCP的缺点,又保留HTTP/2那些好用的功能,比如多路复用。

HTTP/3有哪些过人之处?

1. 连接更快,延迟更低

用传统的HTTP连接(比如HTTP/2),要搞很多次“握手”才能开始传数据,尤其是HTTPS,还得先搞定TLS加密,这一来一回特别耽误事儿。

HTTP/3就不一样了。QUIC支持0-RTT(零延迟)握手,也就是说连上一次后,再次访问的时候,数据能直接发,不需要重复那些复杂流程。少了等待时间,速度立马提上去。

2. 更稳定,不怕掉包

用HTTP/2时,如果一个数据包丢了,那整个TCP连接都会卡住,其他请求也跟着受拖累(这叫“队头阻塞”)。这对不稳定的网络,比如移动网络,简直是灾难。

HTTP/3直接甩掉了这个问题。QUIC把每条数据流分开管理,丢一个包也不会影响其他流,网页不会突然卡住,体验更流畅。

3. 天生更安全

HTTP/3天生就集成了TLS加密,而且用的是最新的TLS 1.3版本。以前的HTTP/2是加了一层“外挂”来实现加密的,而HTTP/3直接把安全性做到骨子里了。

这有什么好处?

  • 更安全:每个HTTP/3连接都默认加密,隐私保护更好。

  • 更快:少了加密流程中的重复步骤,连接速度也更快了。

4. 特别适合移动网络

用手机上网的时候,经常会切换网络,比如Wi-Fi换4G,这种情况用传统的TCP连接就很容易断掉,需要重连,特麻烦。

HTTP/3的QUIC协议用了一个叫连接ID的东西,网络切换时还能保持原来的连接,不需要重新来过。结果就是连接更稳定,特别适合移动场景。

5. 降低服务器压力,省钱

虽然HTTP/3实现起来比HTTP/2复杂,但它能让服务器省不少力,比如:

  • 连接快了,服务器处理效率更高,CPU消耗更少。

  • 队头阻塞没了,带宽利用率也更高。

对于那些内容分发网络(CDN)或者流媒体服务来说,这些改进能省下不少运营成本。

6. 用户体验更棒

最直观的感受就是——网页加载更快,视频播放更顺畅,连接更稳。对于普通用户来说,这些看得见的变化就是HTTP/3最大的魅力。

HTTP/3就是为解决旧HTTP的各种痛点而生的,它连接快、不怕掉包、还自带更强的安全性。对于用户来说,体验就是更快更稳更顺滑,而对于企业来说,效率更高还能省钱。虽然它普及还需要一点时间,但毫无疑问,HTTP/3已经是未来网络通信的趋势了。

宝塔开启HTTP3

首先确认你的宝塔Nginx版本。我们在首页找到nginx。

nginx

要求使用1.25.5及以上版本。

如果版本不够,点击进去可以切换版本

切换版本

修改配置文件

我们需要ngnix支持http3,我们需要修改server块的内容。

进入nginx的配置更改位置,插入下面的配置:

ssl_early_data

1
ssl_early_data on;

注意!开启此项请确保项目能够防止重放攻击。

设置SSL版本

进入网站的高级设置

高级设置

关闭TLS的旧版本。(TLS1.1及之前的版本)

关闭旧版本

开放443端口UDP

我们进入安全设置开启443的UDP端口。

开启端口

进入云服务商开启端口

如果你是云服务器,还需要在云服务商开启端口,即使你印象里已经开启,也需要去检查一下。开启443的UDP。

开启端口

为需要的网站添加QUIC监听

添加监听

我们只需要在需要支持HTTP3的网站中添加一行

第一次添加的网站

1
listen  443 quic reuseport;

以后添加的网站

1
listen  443 quic;

即可。

如果你的服务器有ipv6支持(反正我的没有),通过添加下面的两行可以增加ipv6支持:

1
2
listen  [::]:443 ssl;
listen [::]:443 quic;

修改宝塔自带的h3配置

宝塔自己会给每一个网站添加一行不带有h3的h3 header,导致浏览器无法识别:

h3问题

1
add_header Alt-Svc 'quic=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';

我们需要更改为:

1
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';

更改后

如果你使用的Nginx反代

如果你是使用Nginx反代而不是本身的传输,需要全链路QUIC传输。如果没有的话是不支持的。

但是你可以通过这个文章来绕过这个限制实现HTTP3传输。

大功告成

我们可以到 https://http3.wcode.net/ 来检测网站是否支持。

http3检测

也可以到 https://http3check.net/ 来检测。(由秋风于渭水提供)

检测

浏览器支持

通过检测网站来看还是不直观,所以我们可以在浏览器的控制台中查看。f12进入控制台,在网络标签中,下面传输数据的标题栏右键,开启协议

查看传输协议

我们就可以看到使用的是h3传输了。

如果你没有使用h3传输,还需要查看是否是浏览器不支持。

首先确保你使用最新版本浏览器,chromium内核的浏览器访问:chrome://flags搜索QUIC,启用Experimental QUIC protocol

启用quic

另外啊,要是你用了网络代理,系统代理的 HTTP 和 SOCKS5 都不能转发 UDP 流量,所以想用 H3 的话,那就只能把代理关了。这非常的麻烦,但是可以通过支持自动切换的代理插件实现仅在需要的站点启用。这里就不赘述了。

参考文章

宝塔Nginx开启支持HTTP3/QUIC协议

教程:宝塔编译Nginx开启HTTP/3

[技术教程]宝塔Nginx开启支持HTTP3/QUIC协议 - 简易教程

Nginx 启用 QUIC 与 Brotli 的完整教程(宝塔面板8.0.6)

使用nginx 1.25开启 HTTP/3 支持

本站已接入 HTTP3/QUIC

Linux 自我运维 - Nginx 1.25.2 源码编译并启用 HTTP3