1. DNS缓存的作用
-- DNS缓存仅存储域名与IP的映射关系(如 www.example.com → 93.184.216.34)。
- 它的唯一功能是跳过重复的DNS查询,直接返回IP地址,不涉及资源内容。
- DNS缓存生效后:浏览器会直接使用缓存的IP发起HTTP请求,但后续的网页资源(HTML、CSS、JS等)是否命中缓存,取决于HTTP缓存策略,与DNS缓存无关。
2. 浏览器资源缓存的触发条件
浏览器是否从本地缓存加载资源(如图片、CSS等),取决于以下因素:
- HTTP缓存头部(如
Cache-Control、ETag)。 - 资源的URL是否变化(例如通过文件名哈希区分版本:
style.abc123.css)。 - 缓存是否过期(强缓存/协商缓存逻辑)。
与DNS缓存的关系:
DNS缓存只是帮浏览器快速找到服务器的IP地址,而资源是否从本地缓存加载,完全由HTTP请求的缓存策略决定。两者是独立的步骤
3. 完整流程
假设访问 https://www.example.com/index.html:
-
DNS解析:
- 浏览器检查DNS缓存 → 若有缓存(如
www.example.com=93.184.216.34),直接使用IP;否则递归查询。
- 浏览器检查DNS缓存 → 若有缓存(如
-
建立TCP连接:
- 通过IP地址与服务器建立连接(如
93.184.216.34:443)。
- 通过IP地址与服务器建立连接(如
-
HTTP请求:
-
浏览器检查 HTTP缓存:
- 若
index.html的Cache-Control: max-age=3600未过期,直接读取本地缓存,不发送请求。 - 若过期,向服务器发送请求,可能返回
304 Not Modified(协商缓存生效)或新资源。
- 若
-
-
渲染页面:
- 若HTML/CSS/JS等资源命中HTTP缓存,则从本地加载;否则重新下载。