浏览器工作原理与实践
李兵
前盛大创新院高级研究员
立即订阅
6167 人已学习
课程目录
已完结 42 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 参透了浏览器的工作原理,你就能解决80%的前端难题
免费
宏观视角下的浏览器 (6讲)
01 | Chrome架构:仅仅打开了1个页面,为什么有4个进程?
02 | TCP协议:如何保证页面文件能被完整送达浏览器?
03 | HTTP请求流程:为什么很多站点第二次打开速度会很快?
04 | 导航流程:从输入URL到页面展示,这中间发生了什么?
05 | 渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?
06 | 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
浏览器中的JavaScript执行机制 (5讲)
07 | 变量提升:JavaScript代码是按顺序执行的吗?
08 | 调用栈:为什么JavaScript代码会出现栈溢出?
09 | 块级作用域:var缺陷以及为什么要引入let和const?
10 | 作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?
11 | this:从JavaScript执行上下文的视角讲清楚this
V8工作原理 (3讲)
12 | 栈空间和堆空间:数据是如何存储的?
13 | 垃圾回收:垃圾数据是如何自动回收的?
14 | 编译器和解释器:V8是如何执行一段JavaScript代码的?
浏览器中的页面循环系统 (6讲)
15 | 消息队列和事件循环:页面是怎么“活”起来的?
16 | WebAPI:setTimeout是如何实现的?
17 | WebAPI:XMLHttpRequest是怎么实现的?
18 | 宏任务和微任务:不是所有任务都是一个待遇
19 | Promise:使用Promise,告别回调函数
20 | async/await:使用同步的方式去写异步代码
浏览器中的页面 (8讲)
21 | Chrome开发者工具:利用网络面板做性能分析
22 | DOM树:JavaScript是如何影响DOM树构建的?
23 | 渲染流水线:CSS如何影响首次加载时的白屏时间?
24 | 分层和合成机制:为什么CSS动画比JavaScript高效?
25 | 页面性能:如何系统地优化页面?
26 | 虚拟DOM:虚拟DOM和实际的DOM有何不同?
27 | 渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题?
28 | WebComponent:像搭积木一样构建Web应用
浏览器中的网络 (3讲)
29 | HTTP/1:HTTP性能优化
30|HTTP/2:如何提升网络速度?
31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络
浏览器安全 (5讲)
32 | 同源策略:为什么XMLHttpRequest不能跨域请求资源?
33 | 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
34 | CSRF攻击:陌生链接不要随便点
35 | 安全沙箱:页面和系统之间的隔离墙
36 | HTTPS:让数据传输更安全
结束语 (1讲)
结束语 | 大道至简
课外加餐 (4讲)
加餐一|浏览上下文组:如何计算Chrome中渲染进程的个数?
加餐二|任务调度:有了setTimeOut,为什么还要使用rAF?
加餐三|加载阶段性能:使用Audits来优化Web性能
加餐四|页面性能工具:如何使用Performance?
浏览器工作原理与实践
登录|注册

29 | HTTP/1:HTTP性能优化

李兵 2019-10-10
谈及浏览器中的网络,就避不开 HTTP。我们知道 HTTP 是浏览器中最重要使用最多的协议,是浏览器和服务器之间的通信语言,也是互联网的基石。而随着浏览器的发展,HTTP 为了能适应新的形式也在持续进化,我认为学习 HTTP 的最佳途径就是了解其发展史,所以在接下来的三篇文章中,我会从浏览器发展的视角来和你聊聊 HTTP 演进。这三篇分别是即将完成使命的 HTTP/1、正在向我们走来的 HTTP/2,以及未来的 HTTP/3
本文主要介绍的是 HTTP/1.1,我们先讲解 HTTP/1.1 的进化史,然后再介绍在进化过程中所遇到的各种瓶颈,以及对应的解决方法。

超文本传输协议 HTTP/0.9

首先我们来看看诞生最早的 HTTP/0.9。HTTP/0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体来看,它的实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
下面我们就来看看 HTTP/0.9 的一个完整的请求流程(可参考下图)。
因为 HTTP 都是基于 TCP 协议的,所以客户端先要根据 IP 地址、端口和服务器建立 TCP 连接,而建立连接的过程就是 TCP 协议三次握手的过程。
建立好连接之后,会发送一个 GET 请求行的信息,如GET /index.html用来获取 index.html。
服务器接收请求信息之后,读取对应的 HTML 文件,并将数据以 ASCII 字符流返回给客户端。
HTML 文档传输完成后,断开连接。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《浏览器工作原理与实践》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • Geek_07b5b0
    感谢李兵老师,我今天实习面试用到了很多从这个课程中学到的东西,人生第一次面试,给了我很大鼓励!
    2019-10-10
    11
  • mfist
    1对头阻塞问题,没有解决
    2文本传输效率问题,而且不安全
    3header中每次都传输类似头,增加了传输成本
    2019-10-11
    7
  • JAY
    上传文件给服务器的HTTP请求和其它请求有什么不一样?如何获取当前上传文件的文件名?谢谢!
    2019-10-11
    2
    3
  • 一步
    对于 队头阻塞问题,只要传输层是TCP,就不会得到根本上的解决, http/2 利用流的的机制很大程度的缓解了这个问题,http/3 传输层换成了 UDP 才彻底解决这个问题
    2019-10-22
    2
  • lee
    ”目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP 持久连接“,那就是如果浏览器同时请求n个不同域名的后台服务器,那就是允许同时建立n * 6 个TCP持久连接吗?

    作者回复: 是的

    2019-11-21
  • 月翎魂雨
    文中“目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP 持久连接”,看老师画的图是一个tcp持久链接有6个请求的意思吧。而且前面第03章文中“同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态”。所以我就很迷糊了,这个请求数和tcp链接关系到底是啥?

    作者回复: http/1.1中的一个tcp链接同时只能发起一个http请求!

    浏览器会让每个域名同时最多建立6个tcp链接,也就是说同一个域名同时能支持6个http请求!

    2019-11-12
  • I\O
    1.不能主动推送数据到客户端
    2.同一域名连接数有限制
    2019-11-05
  • TongObama
    李兵老师,想问您画图用的什么软件呢?

    作者回复: mac自带的keynote

    2019-10-21
    1
  • Hurry
    1.HTTP队头阻塞 2.明文传输 3.HTTP header,特别是 cookie 过大。4.与浏览器并发tcp连接被限制在 6
    2019-10-20
  • http1.1 虚拟主机支持那部分,host 可以继续展开来啊。“虚拟主机使得多个域名可以映射到同一IP”,跟“针对不同域名IP做不同处理”,感觉没get到内涵啊
    2019-10-13
  • Chao
    HTTP/1.0就有持久化连接了。 只是要显式声明
    2019-10-11
  • code-artist
    传输短文本,传输视频等等需要分别对待
    2019-10-11
  • tokey
    1、对头阻塞
    2、容易遭受dos攻击
    3、对小文件传输效率低
    2019-10-10
  • 木瓜777
    对头阻塞问题;同一个域名6个连接;请求头文本传输等
    2019-10-10
收起评论
14
返回
顶部