1. 当前位置: 网站首页 >  路由器百科 >  HTTP/2是什么意思?网页加载慢换了它就会快吗,我用curl和F12对了一遍

HTTP/2是什么意思?网页加载慢换了它就会快吗,我用curl和F12对了一遍

HTTP/1.1与HTTP/2多路复用对比实测

前阵子我翻自己的小博客,顺手按F12把Network面板里的Protocol列勾出来。这里有个小坑我先说:地址栏上什么都不会提示,网页也不会弹一句“本网站已升级”,不看这个面板,普通用户根本分不清自己连的是1.1还是2。我那个站和GitHub都写着h2,百度还是http/1.1,心里那股“我的站终于不落后”的劲儿刚上来,又冒出来一个更实在的问题:这玩意儿到底能让网页快多少?

先说清楚:HTTP/2是换发动机,不是单独开一条快车道

HTTP/2就是HTTP协议的第二个大版本,跟1.1比,它没有把网线换粗,也没有让服务器离我更近,主要改的是“同一根连接里怎么安排请求”。

有个前提很多人不问但很关键:浏览器里用的HTTP/2,基本都绑在HTTPS上。你访问的网址要是还写着http://开头,那多半还是1.1。因为浏览器和服务器握手时有个ALPN步骤,两边像对暗号一样商量“我支持h2,你支持吗”,支持了才切过去。所以我后面拿curl测,也都用https开头,这不是为了装专业,是现实里HTTP/2基本只在这个条件下出现。

另外别把HTTP/2当成“打开就快十倍”。它更像把一辆三轮车换成同一条路上的箱货,单次送货时间差不了太多,货一多、路一堵,差距才出来。

HTTP/1.1最烦的地方:一个域名就那6条线

老协议有个规矩我一开始也不理解,浏览器对同一个域名,通常最多同时开6条TCP连接。网页一复杂,图片、CSS、JS、接口几十个请求排队,前面排满6个,后面的就得等。

更憋屈的是“队头阻塞”。同一条TCP连接里,服务器按顺序回数据,前一个请求卡住,后面的响应再早到也只能在缓冲区里等着。我以前写TCP和UDP的区别时就说过,TCP是认顺序的,HTTP/1.1把一堆请求塞进这个认顺序的管子,坏处全继承了。

所以老网站爱玩“雪碧图”“域名分片”,把资源拆到多个域名,让浏览器多开几条线。这事说白了是拿带宽换排队,很无奈。HTTP/2出来以后,这些优化反而有点多余。

HTTP/2的三招:多路复用、二进制分帧、头部压缩

第一招,多路复用。它让一个TCP连接里同时跑几十上百条流,每条流带个编号,你回你的图,我回我的字,谁也不会挡着谁。丢了一个包,只影响跟它相关的那条流,不像1.1那样整根管子一起堵。

第二招,二进制分帧。1.1的请求和响应是按文本一行行读的,HTTP/2把内容切成一个个二进制帧,机器处理起来更直接。这个变化普通用户看不见,但对服务器压力有好处。

第三招,头部压缩。我抓过一次请求头,光User-Agent、Cookie、Accept这些重复字段就占掉一截。HTTP/2用HPACK把重复的头部建成表,第二次只发个索引号,不用每次都把“我是什么浏览器”写一遍。

这三招听着都像服务端优化,落在自己家里,最直观的感受还是网页资源特别多的页面,转圈能少转一会儿。

我拿curl测了一遍,结果和我以为的不太一样

我在这台机器上跑的是curl 7.88.1,里面带nghttp2/1.52.0,所以能主动发起HTTP/2。光看浏览器那个h2我不死心,又用命令行单独点了一次,结果和浏览器完全对得上。先看单个网站协商到哪个版本:

curl -s --http2 -o /dev/null -w '%{http_version}' https://www.shunot.com

输出是2。我又把常逛的几个站跑了一遍:

网站HTTP/1.1请求HTTP/2请求
www.shunot.com1.12
github.com1.12
www.taobao.com1.12
www.baidu.com1.11.1

百度这个结果我不意外,它家首页到现在还守着1.1。这说明HTTP/2不是全网上线,网站没开就是没有。

接着我做了个更狠的测试:同时发6个请求,看新建了多少条TCP连接。HTTP/2下,6个请求共用1条连接;HTTP/1.1下,它老老实实开了6条。总耗时上,我测出来2.19秒对2.90秒,快是快了,但没有“叮一下秒开”那么夸张。

我还拿自己的小博客比过:一个首页二十几个请求,电脑上HTTP/2和1.1几乎感觉不到差别,手机在信号一般时快了有两三百毫秒,得掐着表才看得出来。所以要我说实话:网络好、资源少的时候,HTTP/2带来的体感提升有限。它真正的价值在网页有几十个资源、或者手机信号忽好忽坏的时候,连接数和队头阻塞的问题才显出来。

哪些情况真的会快,哪些情况换了也白换

真能感受到的场景就这几种:一个页面上图片接口特别多、服务器离得远、丢包稍微高一点。像看视频,十分钟的片子被切成64片,几十个分片请求挤在一根连接里,HTTP/2的多路复用就比1.1占便宜。

换了也白换的场景同样多:网站只有三五个文件,服务器本就不支持h2,或者你网速本身只有10兆。还有一种情况,浏览器缓存没生效,资源每次都要重新拉,那再牛的协议也救不了重复请求。

所以别把HTTP/2当万能药。它解决的是连接和调度问题,不是带宽问题,也不是服务器太慢的问题。

自己网站和浏览器怎么查是不是HTTP/2

浏览器查法我已经说了一遍:F12、Network面板,表头上右键勾出Protocol列。显示h2就是HTTP/2,显示http/1.1就是老协议,显示h3说明已经跑到HTTP/3和QUIC那边去了。没勾过这列的,先看一遍F12面板怎么打开,不会丢人。

命令行查也简单:

curl -sI --http2 -o /dev/null -w '%{http_version}\n' https://www.shunot.com

输出2就说明你和网站之间协商到了HTTP/2。想看更细的,Chrome地址栏敲chrome://net-internals/#http2,能看到浏览器当前的h2连接,不过这个页面信息比较杂,一般用户看Protocol列就够。

我给我表哥看这步时,他第一反应是Protocol是什么,记不住这个词。其实不用记英文,打开列以后只认h2和http/1.1两个词就够用。

要是自己开网站,能不能开HTTP/2主要看服务器和证书。现在Nginx、Apache、Caddy基本都支持,宝塔面板里也很少需要手动折腾,真正要确认的是443端口证书正常、HTTP/2开关没被关掉。

收尾:先测,再决定要不要折腾

我把这事排成三步,比一上来就改配置踏实:

  • 先按F12看Protocol列,确认自己常逛的站到底有没有h2。
  • 网页资源多的站,试着用支持HTTP/2的浏览器访问,看加载有没有明显变顺。
  • 自己的网站如果还没开,先看证书和服务器版本;如果已经显示h2,就别再纠结,日常体验不会因为你多改一个参数飞起来。

那天测完我把结果截了个图发群里,有人说我闲得慌。其实搞清楚这个以后,再看到有人把“网页快”全归到某台路由器身上,至少自己不会跟着跑偏。另外也别拿百度首页的1.1当“百度技术差”,大站不上HTTP/2往往不是不会,是老客户端和庞大集群的兼容成本太高,那套账不在咱们家宽讨论范围里。

说到底,HTTP/2值得知道,但不值得神化。对家里宽带和普通网页来说,它更像把路口的排队规则改聪明了,路还是那条路,车还是那些车。

展开全文


版权说明 手机扫码阅读
版权所有:《数巢笔记》 => 《HTTP/2是什么意思?网页加载慢换了它就会快吗,我用curl和F12对了一遍》
本文地址:https://www.shunot.com/lybk/1417.html
除非注明,文章均为 《SHUNOT》 原创,欢迎转载!转载请注明本文地址,谢谢。

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:master_135

工作日:9:00-23:00,节假日休息

扫码关注