在基本理解下面的内容后,再回过来看该图就会一目了然了
浏览器工作原理
当我们在浏览器中输入一个URL并发送请求时,主要会有如下几个处理步骤…
1. URL 解析与缓存检查
-
浏览器会先对 URL 进行解析,识别对应的协议(如 http、https)、域名、端口号和路径等信息
-
浏览器在发送网络请求前,会先检查一下本地缓存(如浏览器缓存、系统缓存等)中是否已有对应请求的资源的副本
浏览器缓存:
首先,浏览器会检查它的缓存中是否有这个域名的记录,因为之前访问过的网址的解析结果可能会被存储在浏览器缓存中
操作系统缓存:
如果浏览器缓存中没有找到,浏览器会询问操作系统,因为操作系统也可能有自己的DNS缓存
**ISP( Internet service provider)缓存:
如果以上都没有缓存记录,请求最终会发送到你的互联网服务提供商(ISP),它们通常会有更大范围的DNS缓存
-
如果本地缓存中存在对应的资源且在没有过期的情况下,直接从缓存中加载资源,来节省时间和带宽; 反之,如果本地缓存中不存在对应的资源或资源已过期时,就会发送对应资源的请求
- **
🔺在浏览器中可以通过一个比较简单的办法来查看请求的资源是否是通过缓存中进行获取:
**如果请求的资源是在本地缓存中加载的,通常对应请求的状态码为 "304 Not Modified",所以我们可以通过控制台中的 network 查看对应的状态码来进行查看
tip: 如果多次请求相同的资源没有使用缓存(状态码始终为 200)时,请先检查一下在 network 中是否禁用了缓存,如果打开了禁用缓存需要先取消掉禁用缓存项(如下图)
- **
2. DNS 域名解析:
如果在本地缓存中没有找到所需资源,浏览器会进行DNS查询,以获取域名对应的IP地址
DNS查询就变成了一个递归查询过程,涉及到多个DNS服务器
根域名服务器:
首先,你的DNS查询会被发送到根域名服务器(根服务器是最高级别的DNS服务器),负责重定向到管理顶级域名(如.com、.net等)的顶级域名服务器
顶级域名服务器(TLD服务器):
根服务器会告诉你的ISP的DNS服务器去查询哪个顶级域名服务器来找到 .com、.net.org 等域的信息 → 这个服务器掌握所有 .com 等域名及其相应服务器的信息
权威域名服务器(二级域名服务器):
一旦你的DNS查询到达了