强制浏览器仅缓存图像(不是脚本和链接)

时间:2014-09-02 20:48:42

标签: javascript php html css caching

我维护一个网站,定期更新和更改样式。在这些变化之后,我的客户经常会抗议我以某种方式破坏了#39;他们的网站纯粹是因​​为他们的浏览器缓存了旧的CSS样式表和/或脚本,有时甚至在刷新之后。

这个问题(How to control web page caching, across all browsers?)解释了我如何用我所掌握的任何技术克服这个问题,但我不想要一个全面的无缓存解决方案,我希望浏览器能够维护图像 - 特别是那些很少改变的图像。

是否可以使用PHP,HTML甚至JavaScript?

叫我强迫症,但我不希望每次内容发生变化时都不修改文件名(虽然我愿意诉诸于此),我正在寻找一个控制机制(如果存在)。

我知道这可以通过Apache Expires模块实现(如此处所述:Website image caching with Apache)但是我的客户使用的主机帐户似乎没有授予我访问权限的权限,如果我&#39 ;老实说,我远离Apache专家。

2 个答案:

答案 0 :(得分:3)

如果您无权访问Apache配置,可以尝试通过.htaccess文件设置过期规则。与流行的看法相反,不仅重写规则,而且任何Apache配置规则都可以包含在那里......如果Apache配置允许的话。但是,值得一试。

要仅缓存某些文件,您可以使用如下指令:

<FilesMatch "\.(ico|pdf|jpg|png|gif|js|css)$">
  Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>

(您可以删除不想缓存的扩展名,并添加其他扩展名。)

现在,对于CSS和JS,通常建议执行以下操作:只需更改对这些文件的引用,只需通过向它们添加(无意义的)查询字符串来更改对这些文件的引用。

例如,在嵌入JS文件时,请执行以下操作:

<script src="/path/to/file.js?rev=123" type="text/javascript"></script>

下次更新该文件时,只需增加rev号码。

答案 1 :(得分:0)

您可以在PHP脚本中使用缓存。创建PHP脚本,并将图像名称作为参数传递。

在php脚本中,只需使用header()函数来控制浏览器缓存。在头函数中设置缓存过期时间。浏览器通过HTTP标头维护缓存。

然后发送缓存控制头。发送图像的另一个标题,发送图像标题后,读取图像的原始内容,只需以二进制流的形式发送图像内容的输出。

以下是代码解释的一个很好的例子

http://www.informatics-tech.com/how-to-leverage-browser-caching-without-htaccess.html

快乐编码 Atul Jindal