强制浏览器仅缓存图像(而不是脚本和链接)
Force browser to only cache images (not scripts and links)
我维护一个定期更新和风格更改的网站。在这些更改之后,我的客户经常会抗议我以某种方式"破坏"了他们的网站,纯粹是因为他们的浏览器缓存了旧的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
- 我发现了一些只在移动设备上可见的垃圾邮件链接,我可以'找不到包含此垃圾邮件链接的脚本的位置
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- Javascript:在新页面中打开链接并运行脚本
- 如何通过分配单个变量来减少此脚本中的链接数
- jQuery Pan & Zoom 或 Magnify 脚本,具有热点或图像映射链接的能力
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 阅读第'页;s从chrome扩展中链接的脚本
- 脚本链接格式以实现跨浏览器兼容性
- 用于浏览器检测和url链接的脚本
- Javascript一页滚动脚本滚动到每个点击的链接一个接一个
- 多个脚本导致链接问题?Javascript、CSS、HTML、Jquery
- 我想更改wordpress标题中的脚本链接.它们在哪里定义
- 在脚本链接标记中使用注释
- 脚本/链接标签与 AJAX 加载
- 如何在新窗口中打开脚本/链接
- 在IE8中单击时,Java脚本链接将消失
- CasperJS不能正确触发动态脚本/链接调用的回调
- 如何从Javascript脚本链接和执行PHP文件
- IF / THEN咖啡脚本链接
- OpenShift -部署的应用程序不会从头标签加载脚本/链接