2025/12/31 12:12:51
网站建设
项目流程
dede无法更新网站主页到,公司做网站的申请,做网站公司哪家强,做网站图片代码怎么居中秋招之前本人不想再做强缓存和协商缓存的笔记了#xff0c;已经写了四五遍了#xff0c;真的很头疼我这坏习惯。都是因为我记笔记太混乱了#xff0c;每次都找不到自己记得笔记#xff0c;然后就只能能重新再记一遍。
一、先搞懂「强缓存优先」的核心逻辑
强缓存和协商缓存…秋招之前本人不想再做强缓存和协商缓存的笔记了已经写了四五遍了真的很头疼我这坏习惯。都是因为我记笔记太混乱了每次都找不到自己记得笔记然后就只能能重新再记一遍。一、先搞懂「强缓存优先」的核心逻辑强缓存和协商缓存是 HTTP 缓存的两个层级浏览器会按「先查强缓存 → 强缓存失效再查协商缓存」的顺序判断「优先」就是指只要强缓存的条件满足比如资源还在max-age有效期内浏览器连请求都不会发给服务器直接从本地缓存取只有强缓存过期了才会发请求走协商缓存流程。二、强缓存和协商缓存「不是必须同时配置」可只配一种1. 只配强缓存最常见配置方式只设置Cache-Control推荐或Expires比如Cache-Control: max-age86400 // 缓存1天适用场景静态资源如图片、字体、不常更新的 JS/CSS这类资源更新频率低优先减少请求数。缺点强缓存有效期内就算服务器资源更新了浏览器也拿不到新资源除非用户手动清缓存/刷新。2. 只配协商缓存配置方式不设置Cache-Control: max-age只返回Last-Modified ETag比如Last-Modified: Tue, 28 Nov 2025 10:00:00 GMT ETag: abc123适用场景资源更新频率高如首页接口数据需要每次确认服务器资源是否最新但又想减少重复传输。缺点每次都要发请求到服务器只是命中时返回 304不传输正文比强缓存多了网络往返。3. 同时配置最优解实际项目主流配置示例Cache-Control: max-age3600 // 先强缓存1小时 Last-Modified: Tue, 28 Nov 2025 10:00:00 GMT ETag: abc123逻辑1小时内直接读本地缓存强缓存1小时后发请求服务器对比Last-Modified/ETag没更新就返回 304协商缓存更新了才返回新资源。优势兼顾「少请求强缓存」和「资源新鲜协商缓存」是前端性能优化的常规操作。三、面试速记结论强缓存优先 浏览器先判断强缓存是否生效生效则无请求失效才走协商缓存可只配一种只强缓存适合静态、低频更新资源省请求但更新不及时只协商缓存适合高频更新资源保证新鲜但每次发请求实际项目建议「强缓存协商缓存」搭配平衡性能和时效性。强缓存和协商缓存都使用的请求判断流程强缓存 协商缓存 组合使用的完整请求流程结合Cache-Control: max-age强缓存 ETag/Last-Modified协商缓存的配置浏览器的请求流程分为首次请求、强缓存有效期内请求、强缓存过期后请求三个阶段以下是带细节的流程图解前置配置服务器响应头# 强缓存资源缓存1小时3600秒 Cache-Control: max-age3600 # 协商缓存文件唯一标识 最后修改时间 ETag: abc123456 Last-Modified: Wed, 27 Dec 2025 10:00:00 GMT完整流程分阶段阶段1浏览器首次请求该资源浏览器发送完整请求到服务器无缓存不携带任何缓存相关请求头。服务器处理请求返回200 OK同时在响应头带上Cache-ControlETagLast-Modified。浏览器接收响应保存资源到本地缓存记录缓存元信息max-age过期时间、ETag、Last-Modified。浏览器渲染资源。阶段2强缓存有效期内1小时内再次请求浏览器检查缓存元信息max-age未过期 →强缓存生效。浏览器不发送任何请求到服务器直接从本地缓存读取资源。控制台 Network 面板显示200 OK (from disk cache/memory cache)。渲染资源全程无网络请求。阶段3强缓存过期后1小时后再次请求浏览器检查缓存元信息max-age已过期 →强缓存失效进入协商缓存流程。浏览器自动在请求头携带缓存验证字段# 对应 ETag 的验证字段 If-None-Match: abc123456 # 对应 Last-Modified 的验证字段 If-Modified-Since: Wed, 27 Dec 2025 10:00:00 GMT服务器接收请求对比验证字段情况A资源未更新ETag/Last-Modified 一致服务器返回304 Not Modified响应体为空节省带宽浏览器更新本地缓存的max-age过期时间重新开始计时浏览器从本地缓存读取资源并渲染。情况B资源已更新ETag/Last-Modified 不一致服务器返回200 OK带上新资源 新的ETag 新的Last-Modified浏览器覆盖本地旧缓存记录新的缓存元信息浏览器渲染新资源。流程总结图文字版首次请求 浏览器 →(无缓存头请求)→ 服务器 →(200Cache-ControlETagLast-Modified)→ 浏览器 → 缓存渲染 强缓存有效期内请求 浏览器 → 检查max-age未过期 → 直接读本地缓存 → 渲染无请求 强缓存过期后请求 浏览器 → 检查max-age过期 → 带If-None-Match/If-Modified-Since请求 → 服务器 ↙️ 资源未更新304 ↘️ 资源已更新200新缓存头 浏览器更新缓存有效期 浏览器覆盖旧缓存 ↘️ ↙️ 读取缓存/新资源 → 渲染面试关键要点强缓存生效时无请求协商缓存无论命中与否都有请求304 无响应体传输更快。协商缓存的请求头是浏览器自动携带的无需前端手动设置。ETag优先级高于Last-Modified解决文件修改时间秒级内变更的问题。需要我帮你整理缓存相关的面试易错点吗比如no-cache和no-store的区别、用户刷新对缓存的影响。。。。