Apache默认不强制禁用缓存,开发中HTML/JS/CSS未更新主因是浏览器或代理缓存响应;需通过mod_headers配置Cache-Control等响应头禁用缓存,否则浏览器会复用内存或磁盘旧副本。

Apache 默认不会强制禁用缓存,开发中看到旧 HTML/JS/CSS 而不是最新代码,八成是浏览器或代理缓存了响应——必须手动干预响应头或配置行为。
为什么改了文件但浏览器不更新?
Apache 本身不主动加 Cache-Control 或 Expires 头,但浏览器对 .html、.js、.css 等静态资源会按默认策略缓存(比如基于 Last-Modified 或 ETag)。开发时你改了 app.js,浏览器却继续用内存或磁盘里的旧副本,控制台 Network 面板里状态码显示 200 (from memory cache) 就是典型表现。
这不是 XAMPP 的 bug,而是 HTTP 协议的正常行为。要让每次请求都拉新内容,得告诉浏览器“别缓存”。
在 httpd.conf 或虚拟主机里加响应头
必须先确保 mod_headers 已启用(否则 Header set 指令无效):打开 XAMPP\apache\conf\httpd.conf,取消这行注释:
LoadModule headers_module modules/mod_headers.so
然后在对应目录块(如 <directory></directory>)中添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"Header set Pragma "no-cache"Header set Expires "0"
注意:no-store 比 no-cache 更激进,彻底禁止任何本地存储;开发阶段用它最省心。生产环境切勿长期使用,会拖慢加载速度。
用 .htaccess 快速临时禁用(仅限允许覆盖的目录)
如果 Apache 配置里已设 AllowOverride All(常见于开发环境),可在项目根目录放 .htaccess:
<IfModule mod_headers.c>
<FilesMatch "\.(html|htm|js|css|php)$">
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>
</IfModule>
但要注意:.htaccess 在 XAMPP 默认配置下常被禁用(AllowOverride None),直接放进去会返回 500 错误。务必先确认 httpd.conf 中对应目录的 AllowOverride 是 All,且 mod_headers 已加载。
Chrome 开发者工具里“禁用缓存”只是前端开关
DevTools 的 Disable cache 勾选项只在开发者工具开启时生效,且仅影响当前标签页的网络请求。它不改变服务器行为,也不影响其他浏览器或用户。所以:
- 它适合快速验证是否是缓存问题
- 不能替代服务端配置,尤其当你需要刷新 iframe、AJAX 请求或第三方脚本时
- 如果勾选后仍不更新,说明问题不在缓存,可能是 ETag 冲突、CDN 中间层、或 PHP 输出缓冲未 flush
真正可靠的开发模式,是服务端明确声明不缓存——否则你永远不确定哪次修改被谁悄悄“记住”了。

















