导航流程:从输入URL到页面展示这中间发生了什么|浏览器篇
# 导航流程:从输入URL到页面展示这中间发生了什么
30 秒速记
- 从输入
URL到页面展示不是单进程内的连续动作,而是浏览器进程、网络进程和渲染进程协同完成。 - 浏览器进程接收用户输入,并负责交互、子进程管理以及文件存储等工作。
- 网络进程面向浏览器进程和渲染进程提供资源下载能力,负责发起
URL请求并接收服务器响应。 - 收到响应后,浏览器进程准备渲染进程,并通过提交文档阶段把页面数据交给它。
- 渲染进程解析
HTML、CSS、JavaScript和图片等资源,加载子资源并形成可显示、可交互的页面;题干所述Chrome架构中,它运行于安全沙箱内。 - 从用户发出
URL请求到页面开始解析的区间称为导航,后续解析与渲染属于页面展示阶段。
从输入 URL 到页面展示,是浏览器进程、网络进程和渲染进程协同完成的一条链路。 浏览器进程接收输入并管理子进程,网络进程负责发起请求和接收响应;响应到达后,浏览器进程准备渲染进程并提交文档。渲染进程再解析 HTML、CSS、JavaScript 和图片等资源,同时加载子资源,最终形成可显示、可交互的页面。用户发出请求到页面开始解析属于导航阶段,之后才是页面解析与渲染;在题干所述架构中,渲染进程还运行在安全沙箱内。
“在浏览器里,从输入URL到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络、操作系统、Web等一系列的知识。所以我在面试应聘者时也必问这道题,但遗憾的是大多数人只能回答其中部分零散的知识点,并不能将这些知识点串联成线,无法系统而又全面地回答这个问题。
那么今天我们就一起来探索下这个流程,下图是我梳理出的“从输入URL到页面展示完整流程示意图”:

从图中可以看出,整个过程需要各个进程之间的配合,所以在开始正式流程之前,我们还是先来快速回顾下浏览器进程、渲染进程和网络进程的主要职责。
- 浏览器进程主要负责用户交互、子进程管理和文件储存等功能。
- 网络进程是面向渲染进程和浏览器进程等提供网络下载功能。
- 渲染进程的主要职责是把从网络下载的HTML、JavaScript、CSS、图片等资源解析为可以显示和交互的页面。因为渲染进程所有的内容都是通过网络获取的,会存在一些恶意代码利用浏览器漏洞对系统进行攻击,所以运行在渲染进程里面的代码是不被信任的。这也是为什么Chrome会让渲染进程运行在安全沙箱里,就是为了保证系统的安全
回顾了浏览器的进程架构后,我们再结合上图来看下这个完整的流程,可以看出,整个流程包含了许多步骤,我把其中几个核心的节点用蓝色背景标记出来了。这个过程可以大致描述为如下:
- 首先,用户从浏览器进程里输入请求信息;
- 然后,网络进程发起URL请求;
- 服务器响应URL请求之后,浏览器进程就又要开始准备渲染进程了;
- 渲染进程准备好之后,需要先向渲染进程提交页面数据,我们称之为提交文档阶段;
- 渲染进程接收完文档信息之后,便开始解析页面和加载子资源,完成页面的渲染。
这其中,用户发出URL请求到页面开始解析的这个过程,就叫做导航。下面我们来详细分析下这些步骤,同时也就解答了开头所说的那道经典的面试题。
面试官追问
追问 1服务端已经把首页 HTML 返回成功,产品就认为导航结束且页面应该完整可交互,你会怎样反驳?
收到 HTML 不等于页面已经完整展示,浏览器还要准备渲染进程并提交文档。渲染进程接收后才开始解析页面、加载子资源和完成渲染;题述导航只覆盖发出 URL 请求到页面开始解析这一段。
追问 2架构评审有人想让浏览器进程直接解析 HTML、执行 JavaScript 并绘制页面,以减少进程通信,你会接受吗?
不会,这违背题述的进程职责划分。浏览器进程负责用户交互、子进程管理和文件存储,页面资源的解析与渲染由渲染进程承担;把不受信任的页面代码移出安全沙箱,还会破坏原有隔离边界。
追问 3一个纯静态页面没有脚本,团队认为可以跳过渲染进程准备和文档提交,直接由网络进程显示 HTML,这个推断成立吗?
不成立,是否包含脚本不会改变网络下载与页面解析的职责边界。网络进程提供下载能力,浏览器进程仍需准备渲染进程并提交页面数据;静态页面只是后续资源和执行负担可能较少,并不等于可绕过渲染流程。
追问 4线上文档请求已成功结束,但页面迟迟没有开始解析,你会只检查网络进程的下载逻辑吗?
不会,响应到达后还存在渲染进程准备与提交文档两个关键节点。应确认浏览器进程是否选好渲染进程、页面数据是否完成交付,以及渲染进程是否确认接收;下载成功只能排除部分网络问题。
追问 5安全评审质疑渲染进程为何必须运行在沙箱中,理由只是“Chrome 一直这样设计”是否充分?
不充分,核心依据是渲染进程会解析和执行从网络获得的 HTML、CSS、JavaScript 等不受信任内容。恶意代码可能利用浏览器漏洞攻击系统,沙箱用于限制其影响范围;它会增加进程协作,但这是明确的安全隔离代价。
追问 6排查首页白屏时,怎样把导航故障与渲染故障分开,而不是看到 Document 成功就结束分析?
先确认 URL 请求、渲染进程准备和文档提交是否完成,再检查渲染进程是否开始解析及加载子资源。若文档尚未提交,问题仍在导航链路;若已经提交,则应继续查看页面解析、脚本执行和资源加载,不能只凭响应状态下结论。
# 从输入URL到页面展示
30 秒速记
- 地址栏先把输入识别为搜索词或网址:搜索词被拼成搜索引擎地址,网址则会被补全为可导航的
URL。 - 浏览器进程通过
IPC把导航交给网络进程;网络进程依次处理缓存、DNS、连接建立、请求发送和响应接收,HTTPS还涉及TLS。 - 响应头决定导航分支:
301、302配合Location触发新一轮请求,Content-Type决定响应进入页面流程还是下载管理器。 - 确认响应是
HTML后,浏览器准备渲染进程;按原文所述的Chrome策略,同站点的新页面可能复用已有进程,其他情况通常创建新进程。 - 提交文档时,渲染进程从网络进程接收响应体并回传确认;浏览器随后更新地址栏、安全状态和历史记录,再由渲染进程解析文档、加载子资源并完成页面生成。
- 旧页面不会在回车后立即消失;只有新文档完成提交,浏览器才切换页面状态,因此网络等待期间仍可能显示原内容。
从输入 URL 到页面展示,本质上要经过地址识别、网络请求、文档提交和页面生成。 浏览器先补全地址,再由网络进程处理缓存、DNS、连接及响应;遇到重定向或下载类型时,会转入对应流程。确认是 HTML 后,浏览器准备渲染进程并提交响应体,随后解析文档和加载子资源。新文档提交前旧页面通常仍然可见,所以加载中不代表页面已经切换。
知道了浏览器的几个主要进程的职责之后,那么接下来,我们就从浏览器的地址栏开始讲起。
原理拆解: 用户在地址栏确认输入后,浏览器进程先判断内容是搜索词还是可导航的 URL,再通过 IPC 把网络任务交给网络进程。网络进程检查缓存、解析 DNS、建立连接并发送请求;访问 HTTPS 页面时,连接阶段还包含 TLS 协商。收到响应头后并不会立即开始解析页面:若状态码为 301 或 302 且存在 Location,浏览器会针对新地址重新发起导航;若 Content-Type 表明内容应作为下载处理,则交给下载流程;只有确认响应是可渲染的 HTML 文档后,才进入渲染进程准备与文档提交阶段。
具体例子: 输入 example.com 后,浏览器可能补全协议并请求站点。若服务器返回 302,将地址指向登录页,网络进程会继续请求登录页,而不是把首次响应当作页面渲染。登录页响应为 text/html 后,浏览器为导航选择或创建合适的渲染进程。提交文档时,响应体被交给渲染进程,渲染进程确认接收后,浏览器进程更新地址栏、历史记录和安全状态;随后渲染进程解析 HTML、构建 DOM,并触发样式表、脚本和图片等子资源请求。
边界与排查: 回车后旧页面通常不会立刻被清空,因为新导航可能遇到网络等待、重定向、证书错误或下载分流,只有新文档提交后才完成页面切换。同站点是否复用渲染进程受浏览器的站点隔离策略、现有进程状态和具体版本影响,不能简单等同于“同域名一定同进程”。页面看似白屏也不一定是网络失败,可能是文档已提交,但脚本执行、样式计算或渲染阶段发生阻塞。
工程验证: 在开发者工具的 Network 面板勾选保留日志后执行导航,按时间查看 Document 请求、重定向链、状态码和 Content-Type;通过 Timing 区分域名解析、连接、等待响应与下载耗时。若文档请求正常但页面未展示,再检查 Console 错误、子资源请求以及主线程长任务,从而判断故障发生在导航、文档提交还是页面生成阶段。
面试官追问
追问 1用户输入 example.com 后旧页面停留了几秒,前端负责人据此认定客户端路由失效,你会接受这个判断吗?
不会,新导航完成文档提交前,旧页面通常不会立即被清空。期间可能发生网络等待、重定向、证书错误或下载分流;应先检查 Document 请求和提交时机,不能仅凭旧页面仍可见就归因于前端路由。
追问 2首页接口返回 302 并带有登录页的 Location,网络进程是否会把这次响应体提交给渲染进程再跳转?
不会按普通页面文档直接提交,浏览器会读取 Location,针对新地址重新发起导航。只有后续响应被确认是可渲染的 HTML,才进入渲染进程准备和文档提交;重定向链过长或目标失败都会延后页面切换。
追问 3运维把真实的首页源码响应标成 Content-Type: application/octet-stream,即使正文是完整 HTML,浏览器还会正常渲染吗?
不会仅凭正文长得像 HTML 就正常渲染,浏览器会依据响应类型决定后续处理。该类型可能让导航转入下载流程而非文档提交;排查时应同时核对状态码、响应头和实际处理结果,不能只查看响应体。
追问 4线上出现白屏,Document 请求状态正常且类型为 text/html,Timing 也没有明显网络等待,下一步你会查哪里?
此时应确认文档是否已提交,并继续查看 Console、子资源请求和主线程长任务。页面可能已经离开导航阶段,却在脚本执行、样式计算或渲染过程中阻塞;文档请求成功只能说明网络链路的一部分正常。
追问 5性能团队想用“同域名一定复用同一个渲染进程”来简化监控模型,你会同意这个选型前提吗?
不会,同站点是否复用渲染进程还受站点隔离策略、现有进程状态和具体实现影响。监控可以记录进程复用结果,但不应把同域名写成必然条件;错误假设会掩盖渲染进程准备阶段的真实耗时。
追问 6一个页面的 Document 很快返回,但脚本和图片随后加载缓慢,为什么不能把地址栏回车到全部资源完成都统称为导航?
题述导航止于页面开始解析,而子资源加载和最终渲染属于后续页面生成过程。渲染进程接收文档后会构建 DOM,并触发样式表、脚本和图片请求;区分两段链路才能判断慢点发生在网络导航还是页面渲染。
# 1. 用户输入
30 秒速记
- 地址栏同时承担搜索入口和导航入口,会先判断用户输入更像搜索内容还是
URL。 - 搜索内容会被编码进默认搜索引擎的请求地址;符合网址规则的输入会按规则补全协议等信息,形成完整
URL。 - 按下回车即启动导航,标签页可以先进入加载状态,但这不代表新页面已经接管当前页面。
- 旧内容会保留到新文档提交完成,因此加载指示、地址导航和页面内容切换并非同一时刻发生。
用户在地址栏输入内容后,浏览器会先判断它是搜索词还是可导航的 URL。 搜索词会被编码进默认搜索引擎地址,网址则会补全协议等信息,再创建导航请求。按下回车后,地址栏和加载图标可以先变化,但新页面还没有接管标签页。若后续发生超时、证书错误或重定向,旧页面可能继续显示,直到新文档成功提交。
