一、大概流程

1、首先,用户从浏览器进程里输入请求信息;
2、然后,网络进程发起URL请求;
3、服务器响应URL请求之后,浏览器进程就又要开始准备渲染进程;
4、渲染进程准备好之后,需要先向渲染进程提交页面数据,这个阶段称为提交文档阶段;
5、渲染进程接收完文档信息之后,便开始解析页面和加载子资源,完成页面的渲染。



二、详细流程

1、用户输入

当用户在地址栏输入一个查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求URL。

  • 如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,来合成新的带搜索关键字的URL。
  • 如果判断输入的内容符合URL规则,那么地址栏会根据规则,把这段内容加上协议,合成为完整的URL。

2、URL请求过程

这个过程中,浏览器进程会通过进程通信(IPC)把URL请求发送到网络进程,网络进程接收到URL请求之后,会发起真正的URL请求流程。
URL请求具体流程如下:

  • 首先,网络进程会查找本地是否缓存了该资源。如果有缓存资源,那么直接返回资源给浏览器进程;如果在缓存中没有查找到资源,那么直接进入网络请求流程。请求前的第一步是要进行dns解析,以获取请求域名的服务器IP地址。如果请求协议是https,那么还要建立TLS连接。
  • 接下来利用IP地址和服务器建立tcp连接。连接建立之后,浏览器会构建请求行、请求头等信息,并把该域名相关的cookie等数据附加到请求头中,然后向服务器发送构建的请求信息。
  • 服务器收到请求信息后,会根据请求信息生成相应数据(包括响应行、响应头和响应体等信息),并发给网络进程。等网络进程接收响应行和响应头之后,就开始解析响应头的内容。

(1) 重定向

在接收到服务器返回的响应头后,网络进程开始解析响应头,如果发现返回的状态码是301或者302,那么说明服务器需要浏览器重定向到其他URL。这时候网络进程会从响应头的Location字段里面读取重定向的地址,然后发起新的HTTP或者https请求,一起又重头开始了。

(2) 响应数据类型处理

浏览器根据Content-Type请求响应数据类型,Content-Type是http头中一个非常重要的字段,他告诉浏览器服务器返回的响应体数据是什么类型,然后浏览器会根据Content-Type的值来决定如何显示响应体的内容。
如果Content-Type字段的值被浏览器判断为下载类型,那么请求会被提交给浏览器的下载管理器,同时该URL请求的导航流程就此结束。但如果是HTML,那么浏览器则会继续进行导航流程。

3、准备渲染进程

  • 默认情况下,Chrome会为每个页面分配一个渲染进程。
  • 如果从一个页面打开了另一个新页面,而新页面和当前页面属于同一站点(协议相同,根域名相同)的话,那么新页面会复用父页面的渲染进程。


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

    4、提交文档

  • “提交文档”的消息是由浏览器进程发出的,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“通道”。

  • 等文档数据传输完成之后,渲染进程会返回“确认提交”的消息给浏览器进程。
  • 浏览器进程在收到“确认提交”的消息后,会更新浏览器界面状态,包括安全状态、地址栏的URL、前进后退的历史状态,并更新web页面。

5、渲染阶段

一旦文档被提交,渲染进程便开始页面解析和子资源加载了,渲染阶段涉及的内容比较多,将在下一篇文章介绍。