1. 1. DNS解析
  2. 2. 与服务器建立连接(TCP连接)
    1. 2.1. 三次握手建立连接
    2. 2.2. 四次挥手断开连接
  3. 3. HTTP请求响应阶段
  4. 4. 浏览器解析与渲染
  5. 5. 流程图
  6. 6. 参考资料
  7. 7. 重排Reflow【补充内容】
    1. 7.1. 什么情况下会触发Reflow
  8. 8. 重绘Repaint【补充内容】
    1. 8.1. 什么情况下会触发Repaint

image-20200208212810938

DNS解析

  1. 浏览器拿到地址栏的地址后,先在浏览器的DNS缓存中检索,如果检索到了直接返回地址对应的IP地址;没有检索到则继续检索操作系统的DNS缓存,还没有检索到就读取用户的host配置,最终如果检索到了,就返回地址对应的服务器IP;但是这个时候拿到的IP地址,会被标记为非权威服务器的应答
  2. 如果在缓存中最终也没有检索到,就会从配置文件读取读取13个根域名的服务器地址
  3. 然后向其中的一台发起请求
  4. 根服务器拿到请求后,就会返回根域名的地址
  5. 然后再次向根域名的地址发起请求
  6. 根域名地址的服务器收到请求后,返回顶级域名的地址
  7. 然后再次向顶级域名发请求
  8. 顶级域名服务器收到请求,返回一级域名地址
  9. …….
  10. 循环往复,最终得到与地址栏地址全部匹配的服务器IP,将IP返回给客户端

中间循环往复的查找地址并不是浏览器做的。

计算机通过ISP接入了互联网,那么ISP就会给你分配一个DNS服务器,这个DNS服务器不是权威服务器,而是相当于一个代理的dns解析服务器,他会帮你迭代权威服务器返回的应答,然后把最终查到IP返回给你。(循环往复的地址查找使它处理的)

与服务器建立连接(TCP连接)

三次握手建立连接

  1. 客户端向服务器首先发送请求(请求报文)。(请求发送之后,客户端并不知道自己的发送能力是否正常)
  2. 第一次握手。 服务器接收到请求后,向客户端返回响应(响应报文)。(服务器收到请求后,确认自己接收能力是正常的,浏览器的发送能力是正常的;同时向客户端返回响应,但此时服务器并不能确认自己发送能力是否正常,浏览器的接收能力是否正常)
  3. 第二次握手。 客户端收到响应后,再次向服务器发送请求。(客户端收到响应后,即可确认自己第一次发送到请求服务器接收到了,即可得知,自己的发送接收能力是正常的,服务器的发送接收能力也是正常的。)
  4. 第三次握手。 服务器再次接收到客户端请求,此时可确认自己的发送能力是正常的,客户端接收能力正常
  5. 至此,双方都确认了自己的发送接收能力,对方的发送接收能力是正常的,连接建立成功,双方可以正常通信

四次挥手断开连接

断开连接可以由任意一方发起

  1. 第一次挥手。 主机A向主机B发送个消息,告诉主机B,我没有数据要给你了,你还有数据要给我吗?此时主机A处于等待主机B响应阶段
  2. 第二次挥手。 主机B向主机A发送消息,告诉主机A,我也没有数据要给你了,你可以关闭连接了
  3. 第三次挥手。 主机B向主机A发送消息,告诉主机A,我准备关闭连接了,请你确认。此时主机B处于等待主机A确认的阶段
  4. 第四次挥手。 主机A收到主机B的消息,知道主机B也没有消息给自己了;然后最后一次向主机B发送消息,你关闭连接吧;主机B收到主机A的确认,会关闭连接;主机A等待一段时间后,确认没有主机B没有回应,得知主机B已经成功关闭连接,此时主机A关闭连接

HTTP请求响应阶段

客户端和服务器建立连接成功之后,客户端将浏览器地址发送到服务器,服务器接收到请求地址,查找地址对应的目录结构文件,将文件进行返回

浏览器解析与渲染

image-20200208231233864

浏览器接收到服务器返回的文件后,先识别文件格式(html、zip、png….),分析文件标准(HTML4.1、html5、xml….),解析HTML,遇到css后去加载css文件(遇到js加载JS文件)。

Html的解析和CSS的解析是两条线(可理解为两个线程),Html解析完成之后会得到一个DOM Tree,CSS解析完成会得到一个CSS Tree。

DOM Tree和CSS Tree进行结合,会得到Render Tree,此时相当于告诉浏览器我要在这个地方渲染一个树的结构,但只是结构,并不包含html的内容也不包含元素的位置。

构成Render Tree的同时,会进行Layout的计算,得到这个元素的颜色,位置,大小….

Layout计算完成与Render Tree组合,此时结构有了位置有了,就进入Patienting阶段,浏览器开始绘制(通过GUI渲染)

流程图

img

参考资料

DNS解析过程详解

浏览器中输入url后发生了什么

重排Reflow【补充内容】

DOM结构中的各个元素都有自己的盒子(模型),这些都需要浏览器根据各种样式来计算,并根据计算结果将元素放在它该出现的位置,这个过程称为重排Reflow

什么情况下会触发Reflow

  • 增加、删除、修改DOM节点时,会导致Reflow或Repaint(增加删除肯定会触发重排,重排之后肯定会重绘;修改DOM不一定触发重排,但肯定触发重绘,例如只修改元素的颜色)
  • 移动DOM位置,做动画
  • 修改CSS样式
  • 改变窗口大小,页面滚动
  • 修改网页默认字体

重绘Repaint【补充内容】

当各种盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来后,浏览器便将这些元素都按照各自的特性绘制了一遍,于是页面内容就出现了,这个过程称之为Repaint

什么情况下会触发Repaint

  • DOM改动
  • CSS改动

触发重排肯定会触发重绘;重绘不一定重排