HTML不应长期缓存,应设no-cache或max-age=0、must-revalidate;静态资源(JS/CSS/图片)须用内容哈希命名并配Cache-Control: public, max-age=31536000, immutable,确保HTML更新时资源同步生效。

HTML 本身不缓存静态文件,真正起作用的是 HTTP 缓存策略对 很多人误以为“缓存 HTML 就能缓存它引用的资源”,其实完全不是一回事。浏览器加载 这是解决“改了代码用户看不到”的最可靠方式。哈希值来自文件内容,内容一变,URL 就变,浏览器自然当作全新资源请求。 别依赖 立即学习“前端免费学习笔记(深入)”; 靠肉眼看“刷新后快不快”毫无意义。真实验证得看 Network 面板里每个请求的 最容易被忽略的一点:HTML 引用的资源路径是否真的随内容变化——很多团队只加了哈希,却忘了让构建流程把新哈希写进 HTML,结果缓存策略再完美也白搭。js、css、img</strong></p>
<H3>为什么给 HTML 加 <code>Cache-Control: public, max-age=3600
反而让 JS/CSS 不更新
index.html 后,会按里面写的 <script src="main.js"></script> 单独发起新请求——这些请求各自走自己的缓存逻辑。如果 main.js 响应头没设 Cache-Control,或设了但没带内容哈希,用户就可能一直用旧 JS,哪怕 HTML 已更新。
max-age=3600),但 JS/CSS 缓存时间短或没设,会导致 HTML 新、资源旧,页面行为错乱app.js),即使内容变了,浏览器仍可能复用缓存副本,因为 URL 没变python -m http.server)默认不发缓存头,容易误判“没缓存”——上线后 Nginx/Apache 配了缓存才暴露问题静态文件必须带内容哈希,且 URL 与哈希强绑定
contenthash:输出类似 main.a1b2c3.js,而非 main.[hash].js(后者可能因入口变化而全量更新)Cache-Control: public, max-age=31536000),否则 CDN 不会存HTTP 响应头怎么配才不翻车
<meta http-equiv="Cache-Control">,它在 HTML 文件中完全无效;必须由服务器或 CDN 在 HTTP 响应头里设置。
js/css/font/img 等静态资源:用 Cache-Control: public, max-age=31536000, immutable(immutable 告诉浏览器“这个 URL 永远不会变内容”,可跳过后续验证)index.html:必须用 Cache-Control: no-cache 或 must-revalidate,让它每次检查是否更新(配合 ETag/Last-Modified)no-store,彻底禁用缓存mod_expires 和 mod_headers 都要启用,且 ExpiresByType 的优先级低于 Header set Cache-Control,建议统一用后者本地开发时如何验证缓存行为是否生效
Size 列和 Status 列。
200 (from memory cache) 或 200 (from disk cache) → 走了强缓存304 Not Modified → 走了协商缓存(ETag 匹配成功)200 且 Size 显示具体字节数 → 完全没缓存,每次都下载Cache-Control 和值是否符合预期



















