学习记录整理
导航流程示意图

浏览器进程:主要负责用户交互、子进程管理和文件储存等功能。

网络进程:是面向渲染进程和浏览器进程等提供网络下载功能。

渲染进程:主要职责是把从网络下载的 HTML、JavaScript、CSS、图片等资源解析为可以显示和交互的页面。因为渲染进程所有的内容都是通过网络获取的,会存在一些恶意代码利用浏览器漏洞对系统进行攻击,所以运行在渲染进程里面的代码是不被信任的。这也是为什么 Chrome 会让渲染进程运行在安全沙箱里,就是为了保证系统的安全。

在地址栏输入URL到页面展示,开始解析、渲染之前,这一段时间浏览器的处理过程,称之为《导航》,浏览器主要有以下几个处理阶段。

1、用户输入检测:检测是文字还是url地址

如果是搜索内容,会使用默认的搜索引擎,合成新的搜索关键字url
如果是URL,将会加上http协议,合成带协议的url

2、输入完成回车后、执行请求url,离开原页面之前,beforeunload事件中断处理

beforeunload 事件允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面,比如当前页面可能有未提交完成的表单等情况

不使用beforeunload中断的话,浏览器将会进入url请求处理过程,标签页头部的图标进入加载状态

3、URL请求处理过程

浏览器进程通过(IPC通信)把URL请求发送到网络进程,网络进程将对URL进行请求处理流程

A、检测是否有缓存资源,有的话,直接返回资源

B、没缓存资源,将进行网络请求流程,开始进行DNS解析(同理也会检测DNS缓存),如果是HTTPS,还要建立TLS连接

C、利用DNS获取的IP与服务器建立TCP连接,建立连接TCP后,浏览器再构建请求行、请求头、并把域名相关的cookie附加到请求头中,最后发送请求信息

D、服务器收到请求信息后,会返回响应数据(含响应行、响应头、响应休)

重定向

收到响应信息后,《网络进程》解析响应头,如果是301或302状态码,那么就会再请求响应头的Location字段的URL地址,重新走《第3步URL请求处理过程》,而当响应头的状态码为200,将继续往下处理。

检测响应头的Content-Type数据类型,进行相应处理

如果是application/octet-stream类型,会提交给浏览器下载管理器,《导航流程》结束

如果是text/html,那么会继续进行后续流程。

4、准备渲染进程

默认情况一个页面会分配一个渲染进程,当新开的标签页面是存在《同站点》的情况,将使用已有的渲染进程

同站点:协议(http)+ 根域名(yroot.win), 以下3个情况都算是同站点http://www.yroot.win、http://blog.yroot.win、http://www.yroot.win:8080,即《相同的协议+根域名》视为同站点

准备好渲染进程后,还不能立即进入文档解析处理,因为文档数据还在《网络进程》中,还没提交到渲染进程,所以下一步就是提交文档到渲染进程

5、提交文档

《渲染进程》通知《浏览器进程》准备好了可以执行文档解析处理了,《浏览器进程》将开始清理旧文档,更新浏览器界面状态(含:安全状态、地址栏的 URL、前进后退的历史状态,可以理解为浏览器页面变成空白状态

处理完成后,给渲染进程返回《确认提交》信息,接下来开始HTML文档渲染阶段。

6、渲染阶段

一旦文档被提交到渲染进程,那么就开始页面解析及子资源加载处理。