Apache 过度缓存 JS/CSS/图像

Apache 过度缓存 JS/CSS/图像

我们遇到了一个问题,即浏览器缓存 JS 和 CSS 文件的时间太长。我们经常进行开发,每当我们发布更改时,一些缓存了旧版本的用户就会遇到问题。但我不知道为什么我们的服务器缓存得这么辛苦。

我查看了我们的 httpd.conf,发现以下内容:

<IfModule mod_headers>
   <FilesMatch "\.(css|js)$">
     Header set Cache-Control "max-age=43200, public, must-revalidate"
   </FilesMatch>
</IfModule>

如果我理解正确的话,应该将 JS 和 CSS 文件设置为缓存 12 小时 - 甚至之后还要使用服务器检查文件是否已更改。但是当我检查收到的 HTTP 响应标头时,我甚至看不到任何 Cache-Control 标头!但浏览器似乎始终缓存这些文件,而不是从不缓存它们。

我们的 conf 中没有设置其他标头,据我所知,我们甚至没有使用 mod_expires。这是我们自己的服务器,而不是某些托管解决方案,因此我可以完全控制该框。我们不使用 .htaccess 文件,因此它不会在某个地方被覆盖……

我知道我在这里做错了什么。我很确定我在 apache 中正确安装了 mod_headers,但我不知道如何检查。我应该改用 mod_expires 还是另外使用?我应该使用不同的 max-age 吗?

感谢你们提供的任何帮助。

编辑: 经过进一步的实验,我发现如果我注释掉该<IfModule mod_headers>语句,标题确实会被发送。这很令人困惑,因为如果没有该模块,那么结果Header集也不会起作用。但可以肯定的是,它在我的开发服务器上可以正常工作。

不过,我很担心将其原封不动地部署到我们的实时服务器上。您知道为什么 mod_headers 无法被 IfModule 识别,但仍然有效吗?

答案1

首先,您是否加载了 mod_headers?

如果你删除模块指令并检查错误

apache2ctl configtest

你一定会看到的。

还有一件事。我不知道你的应用程序,但你应该考虑上传新文件而不是玩弄这些文件的缓存。所以你在 html 内容中替换了your.cssyour-v1.css(这就是我对生产网站所做的,你想做的对于开发模式网站来说是可以的。)

相关内容