我们遇到JS和CSS文件被浏览器caching太久的问题。 我们经常进行开发,每当我们推出一个更改,就会打破旧版本caching的用户。 但我无法弄清楚为什么我们的服务器caching这么难。
我看了我们的httpd.conf,我们有这样的:
<IfModule mod_headers> <FilesMatch "\.(css|js)$"> Header set Cache-Control "max-age=43200, public, must-revalidate" </FilesMatch> </IfModule>
所以,如果我理解这个权利, 应该把 JS和CSS文件设置为caching12个小时,然后检查文件和服务器是否已经改变。 但是,当我检查我得到的HTTP响应头,我甚至没有看到任何Cache-Control头! 但是,而不是从来没有caching这些文件,浏览器似乎总是caching它们。
没有其他的头文件被设置在我们的conf中,并且据我所知,我们甚至没有使用mod_expires。 这是我们自己的服务器,而不是一些托pipe的解决scheme,所以我完全控制了这个盒子。 我们不使用.htaccess文件,所以它不会被重写的地方…
我知道我在这里做错了事。 我很确定我有mod_headers在Apache中正确安装,但我不知道如何检查。 我应该使用mod_expires而不是另外? 我应该使用不同的最大年龄?
感谢您提供的任何帮助。
编辑:进一步的实验后,我发现,如果我注释掉<IfModule mod_headers>语句,标题确实发送。 这是令人困惑的,因为如果模块不在那里,那么生成的Header集也不能工作。 但是果然,它正在我的开发服务器上工作。
尽pipe如此,我仍然紧张地将它部署到我们的现场服务器上。 任何想法为什么mod_headers不会被IfModule识别,但仍然工作?
首先你有mod_headers加载?
如果你删除了ifmodule指令并检查错误
apache2ctl configtest
你会看到肯定的。
另一件事。 我不知道你的应用程序,但你应该考虑,而不是玩这些文件的caching上传新文件。 所以你在你的html内容中用your-v1.cssreplaceyour-v1.css文件。 (这就是我要做的生产网站,你想要做的是一个发展模式的网站。)