从输入URL到页面显示,中间发生了什么?

2020-01-13  本文已影响0人  CRJ997

这篇主要是学习了极客时间的《浏览器原理与实践》,写的一篇笔记。
以chrome浏览器为例
chrome浏览器在渲染一个新的页面的时候,会创建四个进程:

  1. 浏览器进程
  2. 渲染进程(获取的内容来自网络,运行在沙箱模式下)
  3. 网络进程
  4. 插件进程(插件不安全,运行在沙箱模式下)

步骤(HTML文档):

  1. 用户输入URL
  2. 浏览器进程判断这是否是一个合法的网址。如果不是,使用浏览器默认的搜索引擎去搜索对应的内容,如果是,那么进行协议的拼装,然后把对应的URL通过进程间通信机制(IPC)转交给网络进程。
  3. 网络进程根据获取的URL,去获取缓存中是否有未过期的缓存,如果有,直接从缓存中获取数据,如果没有,发起HTTP请求:
    3.1 首先进行DNS解析,获取IP地址。
    3.2 建立TCP连接,如果是HTTPS,那么还需要建立TLS连接。
    3.3 给服务器发送请求数据。
    3.4 服务器在接收到请求数据之后,根据请求数据生成响应数据,然后发送给客户端。
    3.5 网络进程接收到响应数据之后,解析响应数据,如果发现响应头是301,302之类的状态码,那么从头部的Location字段获取真实的url地址,重新发起HTTP请求。
    网络进程解析响应头发现是200的状态码,那么网络进程会根据响应头中的content-type的类型去解析数据,并告诉浏览器,准备开始渲染了。浏览器便会开始准备渲染进程
  4. 浏览器进程在接收到网络进程发送过来的响应头数据之后,便进入一个叫“提交文档”的阶段。渲染进程会和网络进程之间构筑传输数据通道,网络进程把数据发送给渲染进程,当文档数据传输完成的时候,渲染进程会提交“确认提交”信息给浏览器进程,这时候浏览器便会开始进行页面的更新,更新状态栏,更新URL地址栏,更新Web页面,更新安全状态(地址栏左侧的锁)。同时渲染进程解析文档信息,并构建渲染树。一边构建一边进行渲染。这时候页面就出来了。
  5. 页面渲染完毕之后,渲染进程通知浏览器,可以不显示loading状态了,这时候页面也就完整的出来了。
上一篇下一篇

猜你喜欢

热点阅读