浏览器工作原理与实践
李兵
前盛大创新院高级研究员
56402 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
浏览器工作原理与实践
15
15
1.0x
00:00/00:00
登录|注册

30|HTTP/2:如何提升网络速度?

头部压缩
服务器推送
可以设置请求的优先级
HTTP/1.1队头阻塞的问题
同时开启了多条TCP连接
TCP的慢启动
思考时间
HTTP/2其他特性
多路复用的实现
HTTP/2的多路复用
HTTP/1.1的主要问题
HTTP/1.1的发展史
HTTP/2:如何提升网络速度?
参考文章

该思维导图由 AI 生成,仅供参考

上一篇文章我们聊了 HTTP/1.1 的发展史,虽然 HTTP/1.1 已经做了大量的优化,但是依然存在很多性能瓶颈,依然不能满足我们日益变化的新需求,所以就有了我们今天要聊的 HTTP/2。
本文我们依然从需求的层面来谈,先分析 HTTP/1.1 存在哪些问题,然后再来分析 HTTP/2 是如何解决这些问题的。
我们知道 HTTP/1.1 为网络效率做了大量的优化,最核心的有如下三种方式:
增加了持久连接;
浏览器为每个域名最多同时维护 6 个 TCP 持久连接;
使用 CDN 的实现域名分片机制。
通过这些方式就大大提高了页面的下载速度,你可以通过下图来直观感受下:
HTTP/1.1 的资源下载方式
在该图中,引入了 CDN,并同时为每个域名维护 6 个连接,这样就大大减轻了整个资源的下载时间。这里我们可以简单计算下:如果使用单个 TCP 的持久连接,下载 100 个资源所花费的时间为 100 * n * RTT;若通过上面的技术,就可以把整个时间缩短为 100 * n * RTT/(6 * CDN 个数)。从这个计算结果来看,我们的页面加载速度变快了不少。

HTTP/1.1 的主要问题

虽然 HTTP/1.1 采取了很多优化资源加载速度的策略,也取得了一定的效果,但是 HTTP/1.1对带宽的利用率却并不理想这也是 HTTP/1.1 的一个核心问题。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HTTP/2是一种旨在提升网络速度和性能的新网络协议。文章首先分析了HTTP/1.1存在的问题,包括带宽利用率不理想、TCP慢启动、多个TCP连接竞争带宽以及队头阻塞问题。随后介绍了HTTP/2的解决方案,即采用多路复用技术,通过一个TCP长连接传输数据,并实现资源的并行请求,从而避免了HTTP/1.1存在的问题。HTTP/2的多路复用机制使得浏览器可以随时将请求发送给服务器,服务器也可以根据优先级返回处理好的请求资源给浏览器,从而提高了页面加载速度和网络效率。HTTP/2还附带实现了很多其他功能,包括设置请求的优先级、服务器推送和头部压缩等。HTTP/2协议规范于2015年5月正式发布,在互联网和万维网上得到了广泛的实现和部署。使用HTTP/2能带来20%~60%的效率提升。总之,HTTP/2是一种更加高效的网络协议,有望为用户带来更快速的网络体验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《浏览器工作原理与实践》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(43)

  • 最新
  • 精选
  • moss
    老师好,采用了HTTP/2之后,雪碧图是不是彻底不需要了呢?而且多张图片变成雪碧图后,多张图片大小加和都没有一张雪碧图大,那是不是雪碧图反而让传输更慢了呢?

    作者回复: http/2是没必要用雪碧图了

    2019-10-17
    6
    20
  • 玉皇大亮
    有个疑问想请教老师,既然HTTP1.1为了并行下载资源为每个域名提供了6个TCP连接,那这6个TCP连接是并行传输数据的么?如果是为什么还会有队头阻塞的问题呢?这里没搞明白,或者其他同学明白的帮忙回答一下呗,感谢感谢

    作者回复: 这六个TCP连接的请求过程是并行的,这里所提到的对头阻塞是指发生在每个单独的tcp连接中,因为一个tcp连接可以用来处理多个http请求。

    2019-12-05
    5
    3
  • -_-|||
    HTTP/2 下浏览器获取的所有请求数据都会经过 "二进制分帧层" 吗?

    作者回复: 是的

    2019-12-16
    2
  • 匡晨辉
    老师,还是没有理解http2怎么就能解决队头阻塞问题呢?http2 还是基于tcp连接的,经过二进制分帧层了以后不还是需要以数据包的形式通过tcp传输吗?tcp的数据包队头阻塞发生了不还是会影响后面的请求数据包的发送吗?

    作者回复: 是不管http/1我还是http/2,最后都需要经过tcp包的形式进行传输! 而tcp包也是按照顺序的,一个阻塞了,会影响到其它数据包的接受!

    2019-12-18
    4
    1
  • vianem
    带宽那有点问题吧?一般我们说的100M带宽,是指100Mbps,转换成MBps得除以8

    作者回复: 我除了啊

    2019-12-05
  • Rocky
    tcp的队头阻塞虽然是缺点,但也从另一个方面保证了数据传输的可靠性,前一个没有完成或者出错,可以重传。改用udp后可能会丢帧,不可靠

    作者回复: http3中的quic协议也提供了udp的可靠传输

    2019-11-29
  • 滇西之王
    在tcp层 Tls层以上的数据都是tcp层的数据,tcp层对每个数据包都有编号,分为1,2,3 .... tcp保证双向稳定可靠的传输,如果2包数据丢失,1号包和3号包来了,那么在超时重传时间还没有收到2编号数据包,服务端会发送2号数据包,客服端收到之后,发出确认,服务端才会继续发送其他数据,客服端数据才会呈现给上层应用层,这样tcp层的阻塞就发生了
    2019-10-12
    1
    66
  • Geek_1e6198
    刚出去面试就被问到了,而且很多都是老师这个专栏下的问题 让我怀疑是不是面试官刚看过这个
    2020-08-06
    5
    30
  • 3Spiders
    TCP的队头阻塞,TCP传输过程中也是把一份数据分为多个数据包的。当其中一个数据包没有按照顺序返回,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。
    2019-10-12
    1
    16
  • 焦糖大瓜子
    HTTP/2请求是如何设置请求的优先级?
    2020-06-02
    4
    10
收起评论
显示
设置
留言
43
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部