浏览器工作原理学习(四)

从浏览器里,从输入URL到页面展示,这中间发送了什么?

  1. 浏览器进程接收用户输入的URL请求,浏览器进程将该URL转发给网络进程
  • 当用户在地址栏输入查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求的URL。
  • 如果是搜索内容,地址栏会使用浏览器默认的搜索引擎来合成新的带搜索关键字的URL。
  • 如果是符合URL规则,地址栏会根据规则把内容加上协议合成为完整的URL。
  • 在进入到网络进程之前,浏览器给当前页面一次执行beforeunload事件的机会(允许页面退出前执行一些数据清理操作,或取消导航)。
  • 若页面没有监听beforeunload事件,浏览器进程通过进程通信(IPC)将URL请求发送给网络进程。
  1. 在网络进程中,进行URL请求
  • 网络进程会先查找本地缓存是否缓存了该资源(浏览器缓存),如果有缓存资源,那么直接返回资源给浏览器进程。
  • 如果浏览器缓存没有该资源缓存,则从浏览器缓存中查询DNS数据缓存,如果浏览器缓存中有该DNS 数据缓存则返回缓存中的IP地址。
  • 如果浏览器缓存中没有该DNS 数据缓存,网络进程则进行DNS解析获取请求域名的服务器IP地址,若请求协议是HTTPS那么还需要建立TLS连接。
  • 等待TCP队列,同一个域名同时最多只能建立6个TCP连接。
  • 利用IP地址 和服务器建立TCP连接。在连接建立之后(TCP3次握手),浏览器会构建请求行,请求头等信息,并把该域名相关的Cookie等数据附加到请求头中,向服务器发送构建请求信息(TCP连接中的网络传输阶段——发起HTTP请求)。
  • 服务器接收到请求信息后,会根据请求信息生成响应数据(包括相应行,响应头和响应体)并发给网络进程。
  • 网络进程接收到响应数据,解析响应行,响应头信息,如果响应行返回的状态码是301/302,网络进程则从响应头的Location字段读取重定向地址,重新发起新的网络请求。
  • 如果响应行返回的状态码是200,那么浏览器则继续处理该请求。检查响应头中Content-Type类型,如果是字节流类型,则将该请求交给下载管理器,该导航流程结束不在进行。如果是HTML类型则通知浏览器进程准备渲染进程进行渲染。
  1. 准备渲染进程。
  • 浏览器进程检查新打开页面和当前页面是否属于同一站点(根域名和协议一致)。如果是同一站点,新页面复用父页面的渲染进程,如果不是同一站点则新建一个渲染进程。
  • 渲染进程准备好后,不能立马进入文档解析状态,因为此时文档数据还在网络进程中,并没有提交给渲染进程,所以下一步进入提交文档阶段。
  1. 提交文档
  • 浏览器进程接受到网络进程响应头数据之后,便向渲染进程发起"提交文档"的消息。
  • 渲染进程接受到"提交文档"的消息后,会和网络进程建立传输数据的"管道"。
  • 等待文档数据传输完成之后,渲染进程会返回"确认提交"的消息给浏览器进程。
  • 浏览器进程在接受到"确认提交"的消息后,会更新浏览器界面状态,包括了安全状态、地址栏URL、前进后退的离职状态,并更新Web页面。
  • 至此一个完整的导航流程(用户发出 URL 请求到页面开始解析的这个过程,就叫做导航)走完,之后就是进入渲染阶段。
  1. 渲染阶段
  • 渲染进程将HTML内容转换为浏览器能够读懂的DOM树结构。
  • 渲染引擎将CSS样式表转化为浏览器理解的styleSheets,计算出DOM节点的样式。
  • 创建布局树,并计算元素的布局信息。
  • 对布局树进行分层,并生成分层树。
  • 对每个图层生成绘制列表,并提交到合成线程。
  • 合成线程将图层分成图块,并在光栅化线程池中将图块转换成位图。
  • 合成线程发送绘制图块命令DrawQuad给浏览器进程。
  • 浏览器进程根据DrawQuad消息生成页面,并显示到显示器上。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值