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

Force browser to only cache images (not scripts and links)

本文关键字:脚本 链接 浏览器 缓存 图像      更新时间:2023-09-26

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

这个问题(如何在所有浏览器中控制网页缓存?)解释了我如何使用我所掌握的任何技术来克服这个问题,但我不想要一个全面的无缓存解决方案,我希望浏览器能够维护图像,尤其是那些很少更改的较大图像。

这可能使用PHP、HTML甚至JavaScript吗?

称我为OCD,但我不希望每次内容更改时都修改文件名(尽管我愿意这样做),我正在寻找一种控制机制(如果存在的话)。

我知道这可以通过Apache Expires模块实现(如这里所解释的:使用Apache的网站图像缓存),但我的客户使用的托管帐户似乎没有授予我访问权限,老实说,我远非Apache专家。

如果您无法访问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编号即可。

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

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

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

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

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

快乐编码Atul Jindal