导航流程
约 1328 字大约 4 分钟
2025-07-10
从输入 URL 开始发生了什么
- 地址栏输入后,浏览器先判断这是
URL还是搜索词。 - 回车后触发导航准备:当前页面可收到
beforeunload。 - Browser 进程把目标地址通过
IPC发给 Network 进程。 - Network 进程做缓存检查、DNS、建连、发请求、收响应。
- 若响应可被渲染(如
text/html),进入“提交文档”阶段。 - Render 进程确认提交后,页面开始解析与渲染。
导航输入
用户在输入完查询关键字后,地址栏会根据是否符合 URL 规则来判断输入的关键字是搜索内容还是请求 URL
- 如果是搜索内容,浏览器会使用其默认的搜索引擎,来合成新的带搜索关键字的 URL
- 如果符合规则,那么浏览器会根据该规则,把这段内容附加上协议,合成为完整的 URL
注
在按下回车键之后,也就意味着当前页面要被替换为新的页面,但在此过程执行前,浏览器给了当前页面一次执行 beforeunload 事件的机会
URL 请求过程
按下回车之后便进入了页面资源请求过程。 浏览器进程会通过 IPC 把 URL 发送到网络进程网络进程,网络进程接收到 URL 请求之后,才会在此发起真正的 URL 请求流程
具体流程
- 网络进程会查找本地是否缓存了该资源。如果有缓存,那么直接返回资源给浏览器进程
- 若没有查找到缓存,那么将进入网络请求流程。首先要进行 DNS 解析,以获取请求域名服务器的 IP
- 然后利用 IP 和服务器建立 TCP 连接,并且如果请求协议是 HTTPS,那么还需建立 TSL 连接
- 连接建立后浏览器会构建请求行、请求头等信息,并把该域名相关的 Cookie 等数据附加到请求头中,然后向服务器发送构建的请求信息
- 服务端收到请求信息后,会根据请求信息生成相应数据(包括响应行、响应头、响应体等),并发送给网络进程。网络进程接收了响应行和响应头之后,就开始解析响应头的内容
重定向
客户端在接收到服务器返回的响应头之后,网络进程就会开始解析响应头,如果发现返回的状态码是 301 或 302 ,那么说明服务器需要浏览器重定向到其他的 URL。此时网络进程就会从响应头中的 Location 字段中读取重定向地址,然后发起新的 HTTP 或 HTTPS 请求

内容类型分流
浏览器通过响应头中的 Content-Type 字段来进行区分服务端返回的响应体数据是什么类型,然后浏览器会根据 Content-Type 的值来决定如何显示响应体的内容


准备渲染进程
Chrome 会为每个页面分配一个渲染进程。但存在一些例外会让浏览器多个页面直接运行在同一个渲染进程中,出现该情况的原因是浏览器的 "同一站点(域名 + 协议)策略
如果从一个页面打开了另一个新页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染进程。官方把这个默认策略叫 process-per-site-instance

提交文档
交文档,就是指 浏览器进程将网络进程接收到的 HTML 数据提交给渲染进程的过程
- 首先浏览器进程接收到网络进程的响应头数据之后,向渲染进程发起 "提交文档" 的消息
- 渲染进程接收到 "提交文档" 的消息后,会和网络进程建立传输数据的 "管道"
- 等文档数据传输完成之后,渲染进程会返回 "确认提交" 的消息给浏览器进程
- 浏览器进程在收到 "确认提交" 的消息后,会更新浏览器界面状态,包括安全状态、地址栏的 URL、前进后退的历史状态,并更新 Web 界面
当渲染进程确认提交之后,更新内容如下图所示:

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