1.用户输入

输入的关键字有两种可能
a:搜索内容 b:请求的url

当用户输入关键字并回车之后,标签页上的图标进入加载状态,且需要等待提交文档阶段页面内容才会被替换。

2.URL请求过程

浏览器进程会通过进程间通信(IPC)把url请求发送至网络进程,网络进程接受到URL请求后,会在这里发起真正的URL请求流程。
image.png

  • 网络进程查找本地缓存是否缓存了该资源

a:有 直接返回资源给浏览器进程
b:没有 进入网络请求流程
1)进行 dns 解析 ,以获取请求域名的服务器ip地址
2)如果请求协议是https,那么还需要建立TLS连接

  • 利用ip地址和服务器建立TCP连接

连接建立之后,浏览器会构建请求行,请求头等信息,并把和该域名相关的cookie等数据附加到请求头中, 然后向服务器发送构建的请求信息

  • 服务器收到请求信息后,会根据请求信息生成响应数据并发送给网络进程,等网络进程收到了响应行和响应头之后,就开始解析响应头的内容

image.png

3.准备渲染进程

什么是同一站点(same-site)?
根域名(geekbang.org)加上协议 (https://或http://),还包含了该域名下的所有子域名和不同的端口,例

  1. https://time.geekbang.org
  2. https://www.geekbang.org
  3. https://www.geekbang.org:8080

浏览器会让多个页面直接运行在同一个渲染进程中

chrome的默认策略是,每个标签对应一个渲染进程,但如果从一个页面打开另一个新页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染进程,process-per-site-instance

打开一个新页面采用的渲染进程策略
通常情况下,打开新的页面都会使用单独的渲染进程
如果从A页面打开B页面,且A B 都属于同一站点的话,那么B页面复用A页面的渲染进程,如果是其它情况,浏览器进程则会为B创建一个新的渲染进程

渲染进程准备好之后,还不能立即进入文档解析状态,因为此时的文档数据还在网络进程中,并没有提交给渲染进程,所以下一步就进入提交文档阶段

4.提交文档

文档指的是 URL请求的响应体数据

浏览器进程发送 => 提交文档的消息 => 渲染进程 => 和网络进程建立传输数据的管道

等文档数据传输完成之后,渲染进程会返回 “确认提交” 的消息给浏览器进程

浏览器进程在收到 “确认提交” 的消息后,会更新浏览器界面状态,包括安装状态,地址栏的URL,前进后退的历史状态,并更新web页面

此时,一个完整的导航流程就走完了,之后就要进入到渲染阶段了。

5.渲染阶段

一旦文档被提交,渲染进程便开始页面解析和子资源加载了。
一旦页面生成完成,渲染进程会发送一个消息给浏览器进程,浏览器收到消息后,会停止标签图标上的加载动画