1.用户输入
浏览器的地址栏会判断用户输入的关键字是搜索内容还是URL,
如果输入内容符合URL规则,地址栏会根据规则把这段内容加上协议合成完整URL
浏览器加载地址时需要等待提交文档阶段页面内容才会被替换
2.URL请求过程
浏览器进程通过进程间通信把URL请求发送至网络进程,网络进程接收到后发起真正URL请求流程:
- 首先查找本地缓存是否缓存了该资源。如果有缓存资源则直接返回;如果没有则进行DNS解析获取请求域名服务器的IP地址进行网络请求。如果请求协议是HTTPS还需建立TLS连接
- 再建立TCP连接,连接建立后,浏览器端构建请求信息并把和该域名相关的Cookie等数据附加到请求头中,然后向服务器发送请求信息
- 服务器收到请求信息后,根据请求信息生产响应数据并发给网络进程,网络进程接收并解析响应信息:
- 重定向
网络进程解析响应头若发现状态码是301
或302
则说明服务器需要浏览器重定向到其他URL,网络进程就从响应头的Location
字段中读取重定向的地址,再次发起请求 - 响应数据类型处理
响应头中的Content-Type
字段值说明了响应体数据的类型- 若字段值是
application/octet-stream
则数据是字节流类型,浏览器会按照下载类型来处理该请求,将请求提交给浏览器的下载管理器,同时导航流程结束 - 若值是
text/html
则数据是HTML格式,浏览器继续进行导航流程开始准备渲染进程
- 若字段值是
- 重定向
3.准备渲染进程
如果从一个页面中打开另一个和当前页面属于同一站点的新页面,则新页面会复用父页面的渲染进程,即多个页面运行在同一渲染进程中
- 同一站点
根域名和协议相同,包括根域名下的子域名和不同端口https://time.geekbang.org https://www.geekbang.org https://www.geekbang.org:8080 # 以上三个地址都属于同一站点
渲染进程准备好后不能立即进入文档解析状态,因为文档数据(响应体数据)还在网络进程中,要将文档提交给渲染进程
4.提交文档
- 由浏览器进程发出,渲染进程接收到后和网络进程建立传输数据的管道
- 等文档数据传输完成后,渲染进程返回确认提交的消息给浏览器进程
- 浏览器进程收到确认提交信息后更新浏览器界面状态包括安全状态、地址栏URL、前进后退的历史状态,并更新Web页面
5.渲染阶段
文档被提交后渲染进程开始页面渲染流程。渲染完成后,渲染进程发送一个消息给浏览器进程,浏览器接收到后会停止标签图标上的加载动画
来源于:极客时间《浏览器工作原理与实践》