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

HTTP/3 是超文本传输协议 (HTTP) 的第三个版本,它对 Web 性能来说意义重大, 让我们看看HTTP/3 如何让网站的速度变得更快!

等等,HTTP/2 发生了什么? 不是几年前才开始推广 HTTP/2 吗? 确实是这样, 但是它出现了一些 问题[1], 包括 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 (RFC 7540) 发布。HTTP/2 的一大特点是多路复用。引入了二进制帧和流机制,允许使用单个 TCP 连接, 通过 Stream 并行下载资源, 提高了传输效率。

另外还有头部压缩 HPACK 算法, 减少重复 header 数据的传输。

d8e8611f10d7e691d360c2870101ee1d.png

但是, 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。

659a3daee62331136d7989c752917eaf.gif

       测试内容     

站点

一个前端静态站点, 包含了 10 个js 文件, 19 个图片, 一些 css 和 font, 总共 36 个资源, 总大小 6.6 M。

7338c458ecf3f5f35dbfa77d7fb8ea5d.png

服务器

Azure Standard B2s, 2 核 4G, Linux (Ubuntu 20.04), Web Server 使用了 Caddy (之前尝试了 nginx, 目前使用 HTTP/3 需要编译 nginx-quic 的代码, 折腾一通后仍有问题, 遂放弃), 相比之下, Caddy 开启 HTTP/3 就简单, 另外自动的 https 证书也很方便。

另外设置了 Cache-Control: "no-store", 禁用缓存, HTTP/3 设置了 0-RTT。

地点

客户端位于上海, 服务端在美国旧金山, 两地距离大概10000 公里。

ab6a5eb816379379fd7d323fd34d9d01.png

三个版本

•https://sfh1.lixiaoshuai.com    HTTP/1.1•https://sfh2.lixiaoshuai.com    HTTP/2•https://sfh3.lixiaoshuai.com    HTTP/3

每个站点使用 Chrome 分别访问10次,然后记录耗时。

       测试结果      

最后,我们看一下测试结果, HTTP/1.1 平均在 3500 ms, HTTP/2 平均在 2500 ms, 而 HTTP/3 平均在 1300 ms, 可以看到 HTTP/3 带来的性能提升还是很明显的。

8c2ae9883619bc8967dfa6a3c4d5834d.png

       总结      

HTTP/3 很快! 虽然目前协议还是 Draft 状态,不过 HTTP/3 RFC 应该很快就要正式发布了。像 Google 和 Facebook 这种大型公司已经开始使用 HTTP/3 提供服务了, web server 也积极拥抱新协议,并提供了实验性的支持。而 QUIC 能否取代使用了几十年的 TCP? 让我们拭目以待!

       Reference      

https://requestmetrics.com/web-performance/http3-is-fast

https://kinsta.com/blog/http3/

https://en.wikipedia.org/wiki/HTTP/2#Criticisms

https://en.wikipedia.org/wiki/HTTP/3 

59f353a075e3545a782b1662c63b9cbb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...

声明:新闻稿非映维官方稿件,任何法律问题均与映维无关视涯科技•未来就在眼前2019年7月9日,在位于合肥新站高新区的自建工厂内,视涯科技(以下简称:“视涯”)作为一家半导体显示技术公司,公布开发中的两款硅…

Qt 第二步 熟悉文件结构组成(二)

目录导航: 《Qt 第一步 HelloWorld 的第一个程序》 《Qt 第二步 槽与信号(一) 实现点击按钮并弹窗》 本文参考《Qt5.9 c开发》 上一篇文使用了槽与信号完成了点击按钮并弹窗的程序效果,这一篇文将会了解Qt的项目文件组成。本节将会…

ArrayList实现

ArrayList实现 数组实现父类:AbstractList接口:List,RandomAccess,Cloneable,Serializable字段://默认容量private static final int DEFAULT_CAPACITY 10;//空的数组,构造函数参数为0和trim中使用,构造参数给0的人绝对会被打死,每放一个元素…

oracle数据本机自动备份

1、创建三个文件 exp.list 内容:oracle数据库的用户名和密码 name pwd exp.log 主要用于存储在自动备份数据库时的日志信息 exp.sh #!/bin/sh#找到数据库的路径 export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/10.2.0/db_1 export …

Chrome浏览器切换到之前打开的标签页会重新加载

这是谷歌的一种策略。当系统内存不足时,系统会自动从内存中舍弃标签页 在地址栏输入chrome://flags/#automatic-tab-discarding,设置为停用即可。转载于:https://www.cnblogs.com/freefish12/p/5435585.html

数据结构之判断一棵树是不是满二叉树

1 满二叉树 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。 2 分析 我们知道满二叉树是三…

【Pix4d精品教程】Pix4DMapper 4.4.10/4.4.12/4.5.6经典手把手图文安装教程(附安装包下载)

Pix4Dmapper系列文章合集: 打开Pix4DMapper时提示Pix4DMapper.exe已停止工作的完全解决办法安装Pix4Dmapper时提示“无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll”完全解决办法Pix4Dmapper完整航测内业操作流程手把手图文教程Pix4Dmapper是一款目前比…

php基础教程 第一步 环境配置及helloworld

PHP 是服务器端脚本语言。全称为 Hypertext Preprocessor 为超文本预处理器。 据说php8不久后也要发布了,趁着8还没有发布赶紧写一个php5到php7(在基础教程写完后将写php7新特性)的教程。PHP版本之间更新会增加新特性(别的语言也…

Hadoop(五)C#操作Hive

HiveHive将HiveQL(类sql语言)转为MapReduce,完成数据的查询与分析,减少了编写MapReduce的复杂度。它有以下优点:学习成本低:熟悉sql就能使用良好的数据分析:底层基于MapReduce实现同样存在一些缺…

【Solidity】3.类型 - 深入理解Solidity

索引 【Solidity】1.一个Solidity源文件的布局【Solidity】2.合约的结构体 【Solidity】3.类型 【Solidity】4.单位和全局可变量 【Solidity】5.表达式和控制结构 【Solidity】6. 合约 【Solidity】7. 部件 【Solidity】8. 杂项 类型 Solidity是一种静态类型的语言,…

etree解析xml_在python中使用Etree解析XML配置文件

请帮助我使用lxml etree解析以下原型的配置文件。我尝试了for event,element和tostring。不幸的是,我不需要文本,而是需要对于给定的属性。在我从这段代码开始,但是在搜索属性时遇到一个键错误,因为它从一开始就扫描^{…

深度优先搜索——八皇后问题

代码&#xff1a;&#xff08;控制台打印不了92种情况&#xff0c;只打印前10种&#xff09; 1 #include<iostream>2 #include<string>3 #include<windows.h>4 #define ok 15 #define error 06 using namespace std;7 8 9 int a[9][9]{0}; 10 int num0; 1…

【CASS精品教程】CASS7.1 道路设计参数文件打开无响应,提示roadpara解决办法,权威解决办法汇总

目录 第一种方法:Win+R 第二种方法:选择打开方式 第三种方法:cmd 在用CASS7.1 软件进行断面法土方量计算,在生成断面图后,需要进行道路设计参数文件的设计,打开断面设计参数文件的时候,无响应,提示roadpara,如下所示:

数据结构之判断一棵树是不是完全二叉树

1 完全二叉树 完全二叉树是由 满二叉树 而引出来的。对于深度为K的&#xff0c;有n个结点的二叉树&#xff0c;当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 如下就是完全二叉树 12 3 4 5 …

ubuntu添加中文输入法

Ubuntu上的输入法主要有小小输入平台&#xff08;支持拼音/二笔/五笔等&#xff09;&#xff0c;Fcitx&#xff0c;Ibus&#xff0c;Scim等。其中Scim和Ibus是输入法框架。在Ubuntu的中文系统中自带了中文输入法&#xff0c;通过CtrlSpace可切换中英文输入法。这里我们主要说下…

打开vs2010,提示无效的许可证数据,需要重新安装

解决办法&#xff1a; 1. 找到安装路径下Microsoft Visual Studio 10.0\Common7\IDE\DDConfigCA.exe ,使用管理员权限运行该exe文件&#xff0c;等待自然退出&#xff1b; 2. 重启VS&#xff0c;重新输入产品密钥&#xff0c;VS2010专业版&#xff08;or旗舰版&#xff09;密…

python3 爬虫第三步 本文包你学会正则 不会就来锤我

简介 正则表达式是一种描述字符的一种方式&#xff0c;通过该方式&#xff0c;匹配字符串。 正则表达式是自由的&#xff0c;一个字符的含义往往代表着一类字符&#xff0c;通过多个正则正则符号的组合描述&#xff0c;可以使组成的正则表达式能够描述一类字符串。 在开发中&a…

.NET性能优化-使用结构体替代类

前言我们知道在C#和Java明显的一个区别就是C#可以自定义值类型&#xff0c;也就是今天的主角struct&#xff0c;我们有了更加方便的class为什么微软还加入了struct呢&#xff1f;这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类。那么使用结构体替代类有什么好处呢&…

ISE14.7兼容性问题集锦

一、 关于win8和win10不兼容性解决办法 &#xff08;win7不会出现闪退的问题&#xff0c;按安装流程做完就可以直接使用了&#xff09; 在安装目录下&#xff0c;我这里是D:\ISE_14.7\14.7\ISE_DS\ISE\lib\nt64中找到libPortability.dll和libPortabilityNOSH.dll两个文件夹&…

幼儿园调查过程怎么写_深圳全托幼儿园哪个好 幼儿园寄宿怎么报名

陪孩子一起阅读的精髓不是认字和背诵&#xff0c;亲子阅读的那些事 亲子阅读是当代的养育新潮流&#xff0c;但它还有更可贵的一面。 脾气再大的妈妈&#xff0c;都有温柔可爱的时刻&#xff0c;就是陪伴孩子阅读的时刻&#xff0c;曾经有一位在我看来算不上温柔的妈妈&#xf…