浏览器缓存由HTTP响应头控制,JavaScript无法直接设置,但可通过URL策略、资源加载方式和服务端响应头间接影响;关键响应头包括Cache-Control、Expires、ETag和Last-Modified,分别用于指令式缓存、过期时间、协商缓存验证等。
浏览器缓存由 HTTP 响应头控制,JavaScript 本身不能直接设置或清除 HTTP 缓存,但可以通过资源加载方式、URL 策略和配合服务端响应头来间接影响缓存行为。
服务端通过以下响应头告诉浏览器如何缓存资源:
虽然 JS 不能改响应头,但可通过操作资源 URL 或加载逻辑绕过或触发缓存:
app.js 输出为 app.a1b2c3.js,URL 变化 → 强制新请求,旧缓存自动
失效。script.js?v=1.2.5 或 style.css?t=1734608040。注意:仅适用于非强缓存策略(如 no-cache 下有效;max-age 很长时可能被忽略)。fetch('/api/data', { cache: 'no-store' })default、no-store、reload、no-cache、force-cache、only-if-cached。script.crossOrigin = 'anonymous' 并配合时间戳,或使用 document.createElement('script') + script.src = url + '?t=' + Date.now()(适合调试或热更新场景)。不同资源类型适用不同策略,典型搭配如下:
Cache-Control: no-cache 或 max-age=0,确保每次访问都校验更新(避免用户看到旧页面)。Cache-Control: public, max-age=31536000(1 年),靠文件名变化驱动更新。no-store 或 no-cache;低频变动可设 max-age=60(1 分钟)减少重复请求。Cache-Control: no-cache, must-revalidate。快速确认缓存是否生效:
Cache-Control、ETag 等字段及取值是否符合预期。max-age 但可能触发协商缓存。