从旧金山到上海, HTTP/3 非常快!

点击上方蓝字
关注我们
(本文阅读时间:5分钟)
大家好 , 我是本期的微软MVP实验室研究院-李帅 。 在最近的6月6日 , HTTP/3已经正式发布了RFC,而使用了QUIC新协议的HTTP/3能否让网站的速度更快 , 让我们通过下面的测试 , 来看一看它的表现 。
微软MVP实验室研究员
从旧金山到上海, HTTP/3 非常快!
文章图片
从旧金山到上海, HTTP/3 非常快!】李帅
微软MVP , 专注于云原生 , 分布式系统 , 可观测性技术 。
HTTP/3是超文本传输协议(HTTP)的第三个版本 , 它对Web性能来说意义重大,让我们看看HTTP/3如何让网站的速度变得更快!
等等 , HTTP/2发生了什么?不是几年前才开始推广HTTP/2吗?确实是这样,但是它出现了一些问题 , 包括TCP队首阻塞,加密问题,以及协议的带来复杂性 。 为了解决这些问题,HTTP/3应运而生 。
好吧 , 但是HTTP/3真的让事情变得更快了吗?接下来 , 我将用一个简单的web基准测试来证明它!
HTTP简史
HTTP(超文本传输协议1.0)的第一个正式版本在1996年完成 。 但是发现了一些问题,根据作者的说法,HTTP/1.0没有充分考虑分层代理、缓存、长连接的需求和虚拟主机的影响 。 所以HTTP/1.1在一年后 , 也就是1997年发布,同时它也是使用最广泛的版本 。
在HTTP/1.1中,浏览器通过TCP连接一次只能下载一个文件,如果一个页面需要10个js文件,那么这些文件将会按顺序下载 。 一个文件的延迟就会阻塞后面的其他内容,也就是我们常说的队首阻塞 。
在18年后,HTTP协议迎来了更新,HTTP/2(RFC7540)发布 。 HTTP/2的一大特点是多路复用 。 引入了二进制帧和流机制 , 允许使用单个TCP连接,通过Stream并行下载资源,提高了传输效率 。
另外还有头部压缩HPACK算法,减少重复header数据的传输 。
从旧金山到上海, HTTP/3 非常快!
文章图片
但是,HTTP/2虽然解决了http的队首阻塞,但是仍然会受到TCP队首阻塞的影响 。
事实上 , 在丢包率高的环境中 , HTTP/1.1性能更好 , 因为浏览器打开了多个并行TCP连接!
▌使用HTTP/3和QUIC实现真正的多路复用
HTTP/2和HTTP/3之间的主要区别在于它们使用的传输协议 。 HTTP/3使用了QUIC新协议来代替TCP协议 , 而QUIC基于UDP开发,和TCP不一样是,UDP并不需要三次握手,结合TLS1.3,也为0-RTT加密传输带来了可能,HTTP/3还带来了新的头部压缩算法QPACK 。
从旧金山到上海, HTTP/3 非常快!
文章图片
测试内容
▌站点
一个前端静态站点,包含了10个js文件,19个图片,一些css和font,总共36个资源,总大小6.6M 。
从旧金山到上海, HTTP/3 非常快!
文章图片
▌服务器
AzureStandardB2s,2核4G,Linux(Ubuntu20.04),WebServer使用了Caddy(之前尝试了nginx,目前使用HTTP/3需要编译nginx-quic的代码,折腾一通后仍有问题,遂放弃),相比之下,Caddy开启HTTP/3就简单,另外自动的https证书也很方便 。
另外设置了Cache-Control:"no-store",禁用缓存,HTTP/3设置了0-RTT 。
▌地点
客户端位于上海,服务端在美国旧金山,两地距离大概10000公里 。
从旧金山到上海, HTTP/3 非常快!
文章图片
▌三个版本
HTTP/1.1:https://sfh1.lixiaoshuai.com/
HTTP/2:https://sfh2.lixiaoshuai.com/HTTP/3:https://sfh3.lixiaoshuai.com/
每个站点使用Chrome分别访问10次 , 然后记录耗时 。
测试结果
最后 , 我们看一下测试结果 , HTTP/1.1平均在3500ms,HTTP/2平均在2500ms,而HTTP/3平均在1300ms,可以看到HTTP/3带来的性能提升还是很明显的 。