前言

了解了浏览器的 导航流程,就可以来回答 “从输入 url 按下回车到页面展示的过程中发生了什么?”这道经典问题的前半部分了,即 从用户发出 URL 请求到页面开始解析的这个过程,也就是 网络请求部分

我们知道,现在的 Chrome 浏览器是 多进程架构,上面的这道经典问题涉及到的进程有浏览器进程、网络进程和渲染进程,先来简单回顾一下这三个进程的主要职责:

  • 浏览器进程:主要负责页面显示、用户交互、子进程管理、文件存储等功能。
  • 网络进程:主要为浏览器进程和渲染进程提供网络请求资源功能。
  • 渲染进程:核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页。

接下来就 来看看浏览器是怎么通过进程之间的协作来完成网络请求的功能吧!

用户输入

流程从用户在地址栏输入查询关键字开始:

  • 用户在地址栏输入关键字浏览器进程 会判断是请求 url 还是搜索内容

    • 如果是搜索内容,则浏览器会使用默认的搜索引擎,合成带有搜索内容的 url
    • 如果是请求的 url,则根据规则判断是否完整,不完整则根据规则合成完整的 url
  • 按下回车,浏览器进入加载状态
    • 在流程继续之前,浏览器还有一个 beforeunload 事件可以执行,该事件可以做一些数据清理操作,还可以中断流程,取消导航;
    • 如果没有 beforeunload 事件或同意继续后续的操作,则流程继续,浏览器进入加载状态;
    • 但页面还是之前的内容,要到 提交文档 阶段才会被替换新的内容。

例如,下图原来的页面是 https://www.npmjs.com/package/egg 的内容,我在搜索框输入 https://www.npmjs.com/package/koa 后按下回车,浏览器便进入了加载状态(左上角的图标开始转圈圈、左下角说正在等待响应),但是页面还是之前 egg 的内容。

  • 接下来是进入 网络资源请求过程浏览器进程 通过进程间通信(IPC)把 url 请求交给 网络进程

网络资源请求

查找缓存

上面 浏览器进程 已经把 url请求的活交给了 网络进程,那么接下来具体的请求流程是怎么样的呢?

网络进程并不会直接发起网络请求,因为 没有请求的请求,才是最快的请求

  • 按照 浏览器缓存策略,网络进程会去检查该资源 是否允许缓存Cache-Control),是否在本地缓存了该资源(缓存位置依次查找)
  • 如果有缓存资源则网络进程直接返回资源给浏览器进程,网络请求结束
  • 如果没有找到资源或者需要验证资源是否有效,则会 真正进入网络请求流程

缓存是一个大课题,会在后面性能优化的章节再详细整理。

DNS 解析

网络请求的 第一步是要拿到请求的服务器 IP 地址,因为 网络请求过程归根结底是一个计算机向另一个计算机请求资源,需要通过 IP 地址建立连接的

一般情况下,用户看到的用到的是 域名,是一串用 . 分隔的多个单词,像掘金是 juejin.cn、淘宝是 www.taobao.com、百度是 www.baidu.com,这个域名是极其重要的,它是一个网站的入口,可以说是拥有了一个好域名就拥有了一个好梦想。听说 FACEBOOK 一开始的域名是 thefacebook.com,后来融资了才花 20 万美金买回 facebook.com 的域名,要是穿越回到过去,屯一波域名都可以成为亿万富翁,哈哈。

回到正题,一个域名可以对应多个 IP 地址,它可以是源服务器的 IP 地址,也可以是 CDN 分发的 IP 地址,还可以是迁移服务器时的一些临时 IP 地址,我们可以用域名系统做很多有趣的事情。

为了拿到正确的 IP 地址,它有一套自己的解析系统,这个系统就是 DNS 系统,如果想更多的了解 DNS 系统,可以去看我之前写过的 DNS域名系统有哪些门道? 。

那么接下来继续 网络请求流程

  • 如果用户输入的就是 IP 地址,则直接进入 TCP 连接阶段
  • 如果用户输入的是域名,则需要进行 DNS 解析,得到服务器的 IP 地址再建立 TCP 连接
    • DNS 也是有缓存的,它的缓存查找过程是浏览器缓存->操作系统缓存->Hosts文件->非权威域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器

TCP 连接

网络进程拿到 IP 地址之后则进入 TCP 连接阶段

  • 请求进入 TCP 队列,单个域名是有 TCP 连接限制(最多6个)的,超出限制需要排队。
  • 浏览器和服务端通过三次握手建立 TCP 连接
    • 客户端向服务端发送连接请求报文
    • 服务端收到连接请求报文段后,如果同意连接,则会发送一个应答
    • 当客户端收到连接同意的应答后,要向服务端发送一个确认报文
  • 如果请求协议是 HTTPS,TCP 连接后还要建立 TLS 连接(安全地交换对称密钥)

发出 HTTP 请求

建立连接后,网络进程正式发出 HTTP 请求

  • 浏览器端会构建请求行、请求头等信息,并把和该域名相关的 Cookie 等数据附加到请求头中,然后向服务器发送请求信息

    • 请求行简要地描述了客户端想要如何操作服务器端的资源,由请求方法、请求目标、版本号三部分构成
    • 头部字段是 key-value 的形式, key 和 value 之间用 : 分隔,用 CRLF 换行,表示字段结束。

服务器响应返回数据

  • 服务器接收到请求信息后,会根据请求信息 生成响应数据返回(包括响应行、响应头和响应体等信息)

    • 状态行代表服务器响应的状态,同样由三部分构成:版本号、状态码、原因
  • 服务器返回信息给网络进程,网络进程接收后开始解析
    • 解析响应头

      • 如果发现返回状态码是 301 或 302,则说明服务器需要浏览器 重定向 到其他 url,网络进程会从响应头的 Location 字段里面读取重定向的地址,然后再发起新的网络请求;
      • 如果状态码是 200,那么表示浏览器可以继续处理该请求。
    • 解析响应数据类型:通过 Content-Type 头字段区分数据类型。
      • 如果 Content-Type 字段的值被浏览器判断为下载类型,那么该请求会被提交给浏览器的下载管理器,同时该 url 请求的导航流程就此结束
      • 如果是 HTML 类型,那么浏览器则会继续进行导航流程;

网络请求拿到 HTML 类型的数据后继续导航流程,由于 Chrome 的页面渲染是运行在渲染进程中的,所以接下来就需要准备 渲染进程 了。

准备渲染进程

  • 默认情况下,Chrome 会为每个页面分配一个渲染进程

    • 通常情况下,打开新的页面都会使用单独的渲染进程;
    • 但是如果从 A 页面打开 B 页面,且 A 和 B 都属于同一站点(拥有相同的协议和根域名)的话,那么 B 页面会复用 A 页面的渲染进程;如果是其他情况,浏览器进程则会为 B 创建一个新的渲染进程。
  • 渲染进程准备好之后,还不能立即进入文档解析状态,因为此时的文档数据还在 网络进程 中,并没有提交给渲染进程,所以下一步就进入了 提交文档 阶段。

提交文档

提交文档,就是指浏览器进程将网络进程接收到的 HTML 数据提交给渲染进程

具体流程是:

  • 首先当 浏览器进程 接收到 网络进程 的响应数据之后,便向 渲染进程 发起“提交文档”的消息;
  • 渲染进程 接收到“提交文档”的消息后,会 和网络进程建立传输数据的“管道”
  • 等文档数据传输完成之后,渲染进程会返回“确认提交”的消息给浏览器进程
  • 浏览器进程 在收到“确认提交”的消息后,会更新浏览器界面状态,包括了安全状态、地址栏的 url、前进后退的历史状态,并更新 Web 页面。

这也解释了为什么在浏览器的地址栏里面输入了一个地址后,之前的页面没有立马消失,而是要加载一会儿才会更新页面。

进入渲染阶段

提交文档后,渲染进程 便开始页面解析和子资源加载了。

一旦页面生成完成,渲染进程 会发送一个消息给 浏览器进程,浏览器接收到消息后,会停止标签图标上的加载动画。

导航流程总结

以上就是 从用户发出 URL 请求到页面开始解析的过程 即 导航流程 了。

简而言之,就是下面这样的流程:

  • 浏览器进程把用户输入的 url 组装成完整的 url 后交给网络进程
  • 网络进程通过 DNS 解析拿到 IP 地址与服务端建立 TCP 连接,然后发出 HTTP 请求,在收到服务端响应返回的数据后开始解析处理
  • 网络进程收到 HTML 类型的数据后,通过提交文档把数据提交给渲染进程,准备进入页面渲染阶段

浏览器知识点整理(六)导航流程相关推荐

  1. 浏览器知识点整理(五)多进程架构

    浏览器有很多功能,比如网络请求.页面渲染.JavaScript 执行和 Web 安全防范等等,而这些功能是分散在浏览器的各个功能组件中的,比较多也比较散,那么通过学习浏览器的多进程架构来把这些知识点串 ...

  2. 第六章:演示文稿软件PowerPoint 2010 ——知识点整理

    第六章:演示文稿软件PowerPoint 2010 --知识点整理 第六章:演示文稿软件PowerPoint 2010 知识梳理 高频考点 6.1 PowerPoint 2010 基本知识 6.1.1 ...

  3. 计算机网络知识点整理---应用层(六)

    本文章是根据B站的王道计算机考研-计算机网络进行整理 *建议使用电脑观看 计算机网络知识点整理-概述(一) 计算机网络知识点整理-物理层(二) 计算机网络知识点整理-数据链路层 (上)(三) 计算机网 ...

  4. 六年级上册计算机知识点总结,六年级数学上册知识点的整理

    第1篇:六年级上册数学圆的知识点整理 一.认识圆 1.圆的定义:圆是由曲线围成的一种平面图形. 2.圆心:将一张圆形纸片对折两次,折痕相交于圆中心的一点,这一点叫做圆心. 一般用字母o表示.它到圆上任 ...

  5. 高数 |【23数一 李林六套卷】卷二 自用思路 及 知识点 整理

    23数一 李林六套卷 -- 自用思路 及 知识点 整理 --[卷二] 以下均为个人复盘. 部分思路讲解参考于 6-2_哔哩哔哩_bilibili 第二套T22_哔哩哔哩_bilibili T1:泰勒 ...

  6. 高数 |【23数一 李林六套卷】卷一 自用思路 及 知识点 整理

    23数一 李林六套卷 -- 自用思路 及 知识点 整理 --[卷一] 以下均为个人复盘. 部分思路讲解参考于 第一套T22_哔哩哔哩_bilibili 2023李林六6套卷数一解题思路(6-2)_哔哩 ...

  7. 六年级上册计算机知识点总结,六年级上册数学知识点整理归纳

    学习要温故而知新,在学习新的知识点之前对已学的知识点进行复习整理是非常好的学习习惯,下面是小编给大家带来的六年级上册数学知识点整理归纳,希望能够帮助到大家! 六年级上册数学知识点整理归纳 第一单元 位 ...

  8. 普通化学第六版知识点整理

    普通化学知识点整理 第1章 热化学与能量 1.几个基本概念 1)系统:作为研究对象的那一部分物质和空间 a.开放系统:有物质和能量交换 b.封闭系统:只有能量交换 c.隔离系统:无物质和能量交换 2) ...

  9. Vue知识点整理(待更新)

    Vue知识点整理(待更新) 参考Vue.js中文官网,Vue 知识点汇总(上)–附案例代码及项目地址,Vue 知识点汇总(下)–附案例代码及项目地址,Vue知识点汇总[持更] 文章目录 Vue知识点整 ...

最新文章

  1. 2019牛客暑期多校训练营(第九场)-E All men are brothers
  2. OpenCV Dbt人脸检测Dbt face detection的实例(附完整代码)
  3. 整数存储怎么转化为浮点数_非整数值如何存储在浮点数中(以及为什么要浮点数)...
  4. Spring Cloud 参考文档(Spring Cloud Context:应用程序上下文服务)
  5. 蓝桥学院2019算法题2.17
  6. PAGE:像Visual Studio一样设计Python GUI窗体
  7. 在 MVC 控制器中使用 构造函数时行依赖注入 (IoC)
  8. java培训 lambda表达式_java 8 中lambda表达式学习
  9. 自己动手写操作系统 ----总计
  10. CVE-2020-11946 ManageEngine OpManager 命令执行
  11. 计算机技术和通信技术的关系,计算机技术与通信技术的关系
  12. 电脑版的微信客户端也能刷朋友圈啦
  13. Google-Spyder:Google搜索引擎关键词检索结果抓取
  14. 计算机网络与应用技术清华答案第二版,计算机网络-原理、技术与应用(第2版)部分习题答案(不外传!).pdf...
  15. 全民奇迹局域网php版,手游全民奇迹8.3镜像端-配套客户端+局域网ip架设+安卓端...
  16. asp.net 各种小窍门
  17. 快捷键以及一些基础知识
  18. 【高并发】解密导致并发问题的第二个幕后黑手——原子性问题(文末有福利)
  19. OpenDaylight是什么?
  20. sorry, the application has stop excepted

热门文章

  1. 计算机音乐在生活中的应用论文,计算机音乐技术在音乐创作的应用
  2. CVE-2021-3156 Sudo溢出漏洞复现
  3. ROS总结 rosdep update时 遇到了timeout报错
  4. 2016智能硬件开发者创客大会
  5. shopee跨境电商是真的吗?2022年Shopee如何选品?
  6. java线程休眠sleep函数_Java多线程中sleep()方法详解及面试题
  7. Android之Calendar类(时间大全)
  8. 计算机专业答辩记录表怎么填,开题报告答辩记录等表格填写模板.doc
  9. 什么是百分比堆积条形图?
  10. 【弄nèng - Activiti6】Activiti6入门篇(十)—— 脚本任务