浏览器输入地址导航过程
处理输入
UI thread 需要判断用户输入的是 URL 还是 query
- 查询:发送到搜索引擎
- URL:请求 URL 的网站
开始导航
-
有注册设置 Service Worker 从缓存加载页面,渲染进程中运行 JavaScript 代码,从缓存加载页面,无需请求网络
-
未设置 Service Worker 时
- UI 线程启动网络调用以获取站点内容,选项卡 spinner
- 网络线程通过 DNS 查找域名对应 IP 及建立 http 连接
- 网络线程接收处理 301 重定向头。网络线程与请求重定向的 UI 线程通信,启动另一个 URL 请求
读取响应
-
确定文件MIME类型
当请求响应返回的时候,network thread 会依据 Content-Type 及 MIME Type sniffing 判断响应内容的格式
-
处理不同 MIME 文件
- 响应文件是 HTML,则将数据传递给渲染器进程。
- 如果为.zip 或其他文件则将数据传递给下载管理器。
-
安全检查
- 恶意名单检查:如果域和响应数据在恶意站点名单中,则网络线程发出和显示警告页面。
- 跨域读取检查:CrossOriginReadBlock 检查,敏感的跨站点数据不进入渲染器进程
查找渲染进程
当上述所有检查完成,network thread 确信浏览器可以导航到请求网页,network thread 会通知 UI thread 数据已经准备好,UI thread 会寻找一个 renderer process 进行网页的渲染。
确认导航
Browser Process 会给 renderer process 发送 IPC 消息来确认导航,一旦 Browser Process 收到 renderer process 的渲染确认消息,导航过程结束,页面加载过程开始。
- 地址栏会更新,展示出新页面的网页信息
- history tab 会更新,可通过返回键返回导航来的页面
- 为了让关闭 tab 或者窗口后便于恢复,这些信息会存放在硬盘中
初始化 load complete
renderer process 渲染结束(渲染结束意味着该页面内的所有的页面,包括所有 iframe 都触发了 onload 时),发送 IPC 信号到 Browser process, UI thread 会停止展示 tab 中的 spinner
导航到其他站点
导航完成后,再次将不同的URL放到地址栏导航,浏览器会检查当前渲染网站的beforeunload事件。