浏览器的主要构成及网络请求到页面渲染的过程理解

476 阅读3分钟

写这篇文章意在自己作为笔记,方便自己理解。没有参考过多资料,通过其他博客和一些自己的理解整理而来。

浏览器

浏览器作为一个客户端,它的主要作用就是展示可访问的资源。不管这些资源是本地资源还是网络请求获取到的资源。

浏览器的构成

  1. 用户界面:包括地址栏、后退/前进按钮、书签目录、刷新按钮等
  2. 浏览器引擎:用来查询和操作渲染引擎的接口
  3. 渲染引擎:用来处理资源内容,并显示处理结果,也就是我们所说的内核
  4. 网络:完成网络的调用
  5. UI后端:用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用用户的操作系统接口
  6. JS解释器:用来解释并执行JS脚本
  7. 数据存储:占用一定的硬盘实现数据的存储

页面的渲染过程

  1. 地址栏输入地址触发网络请求,获取资源文件
  2. HTML解析器解析HTML文件构建成DOM树
  3. 遇到CSS通过CSS解析器解析构建成CSSOM树
  4. 遇到JS通过JS解析器解析
  5. DOM Tree和CSSOM Tree构建呈现树
  6. 呈现书根据结构样式确定节点的位置(布局或者回流)---回流
  7. 确定好位置以后,根据外观样式绘制---重绘
  8. 通过UI后台和用户界面组件把内容显示到浏览器主窗口

输入网址后DNS的解析过程

DNS的缓存从离浏览器的距离排序依次是:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名缓存、顶级域名缓存、主域名服务器缓存

  1. 输入网络地址,发起请求,浏览器解析域名,先在本地硬盘中的hosts文件查找是否有对应的ip地址
  2. 如果在本地硬盘中没有找到相应的ip,浏览器发送一个DNS请求到本地DNS服务器,本地DNS服务器会查询它的缓存记录,缓存中有记录则直接返回结果;如果没有,本地DNS服务器向DNS根服务器进行查询
  3. DNS根服务器如果没有具体的域名和ip地址对应的关系,会告诉本地DNS服务器向域服务器去查找并给出域服务器地址
  4. 本地DNS服务器向顶级域名服务器(如:.com域名)发出请求,顶级域名服务器收到请求后,将本地服务发送的域名服务器地址告诉本地DNS服务器
  5. 本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名有对应的关系ip地址

TCP/IP连接的三次握手和四次挥手

建立连接的三次握手

  1. 客户端发送一个带有SYN标志的数据包给服务端(请求报文)
  2. 服务端接收到请求数据包后回传一个带有SYN/ACK标志的数据包以示传达确认信息(应答-请求报文)
  3. 最后客户端回传一个带有ACK标志的数据包,表示握手结束,连接成功(应答报文)

关闭连接的四次挥手

  1. 客户端发送关闭连接请求(FIN)
  2. 服务端接收到请求后回传一个ACK,确认请求收到
  3. 服务端确认无数据可传输,发送确认关闭的FIN请求到客户端
  4. 客户端回传一个ACK,确认关闭连接