使用mod_headers或mod_expires使图像不可缓存

时间:2011-07-27 17:31:57

标签: javascript apache

我的问题与前一段时间讨论的一篇文章有​​关: how to clear or replace a cached image

让我介绍一下我在做什么...... 我使用JavaScript创建一个每5分钟更新一次的动画。我使用向图像名称添加时间戳的技巧,所以我的图像如下:image-1-no-cache.png?d = 131415135135

我用它来确保更新。如果我没有区分名称,浏览器将不会更新任何内容,因为图像将存储在缓存中,浏览器将不会意识到它们已更改。 我遇到的问题是图像是连续存储的。我通过JavaScript丢失了引用,我不知道如何删除它们。几个小时后,缓存中充满了图像,网站占用了大量内存。

我现在要做的是为图像设置过期日期。我启用了mod_headers和mod_expires模块,我尝试了不同的东西改变了我的.htaccess文件:

<Files ~ ".*no-cache\.png?=*">
   Header set Cache-control "no-cache"
</Files>

<FilesMatch ".*no-cache.png.*">
     ExpiresActive On      
   ExpiresDefault A300
</FilesMatch>

没有任何作用。我们的想法是使文件 -no-cache.png?=。不可缓存。 为什么我没有取得好成绩?我错过了什么?

这是第一次尝试做类似的事情,我很困惑。任何帮助将不胜感激。谢谢 ! 芸

2 个答案:

答案 0 :(得分:0)

向图片添加?something不会使其不可缓存。它会创建网址,该网址可以可缓存,并且不会影响其他网址,因此其他所有?versions也会保留在缓存中。

<Files ~ "no-cache\.png">
   Header set Cache-control "max-age=10, must-revalidate"
</Files>

这将告诉Apache将标头添加到文件名中任何位置no-cache.png的所有文件中(不需要.*)。 AFAIK这匹配文件系统名称,而不是URL,因此查询字符串永远不会存在。

标题表示缓存最多10秒,并在每次使用前检查服务器的新鲜度。

答案 1 :(得分:0)

这不起作用!

使用您的配置,浏览器应在10秒后重新验证(=更新)图像,但这不会发生。

我认为最好的选择是设置“Header set Cache-Control”no-store“”。 如果我拥有JavaScript Image数组中引用的所有图像,则不需要使用缓存。目前,这是我找到的最佳选择。

无论如何,谢谢你, 芸