代码之家  ›  专栏  ›  技术社区  ›  uriDium

有没有办法强制浏览器刷新/下载图像?

  •  37
  • uriDium  · 技术社区  · 15 年前

    我有一个问题,用户报告他们的图像没有上传,而旧的仍然存在。仔细观察,新的图像就在那里,它们和旧的图像同名。我在上传上做的是为了搜索引擎优化而重命名图像。当它们删除一个图像时,旧的索引将变为可用的并被重用。因此它具有相同的图像名称。

    有没有办法告诉浏览器不要使用它的cahce?

    更好的答案是将图像重新命名为全新的图像。我将着手解决这一问题,但与此同时,当我处理更大的问题时,快速的解决方法就是。

    10 回复  |  直到 7 年前
        1
  •  107
  •   isherwood    8 年前

    附加具有任意唯一编号(或时间或版本号等)的查询字符串:

    <img src="image.png?80172489074" alt="a cool image" />
    

    这将导致一个新的请求,因为URL不同。

        2
  •  20
  •   ndp    15 年前

    这很难。您确实希望缓存图像,但如果有新的图像可用,则不希望缓存它们:

    • 将Expires头与过去的日期一起使用可防止任何缓存。坏的
    • 添加“缓存总线”参数?342038402可以解决此问题,但也可以防止缓存图像,这不是您想要的。坏的。
    • 使用Expires头和一个短的(比如1小时)Expires是更好的…一小时后,用户将看到图像,但您的Web服务器不必每次都提供图像。妥协,但什么时候有效?不太可行。

    解决方案?我可以想到两个好的选择:

    • 看看电子标签,以及你使用它们的能力。这些都是为这种情况而设计的。浏览器将明确询问您的服务器该文件是否是最新的。如果你没有阿帕奇,你可以打开它。
    • 为每个新图像创建一个新的URL(并使用一个远未来的Expires头)。这就是你正在做的。
        3
  •  4
  •   samuil    15 年前

    你可以放 http-equiv 在里面 <meta> 标签,它告诉浏览器不要使用缓存(或者更好——以某种定义的方式使用缓存),但最好配置服务器以发送正确的HTTP cache 标题。退房 article on caching .

    不过,有些浏览器可能不支持 http 标准,但我相信这是前进的道路。

        4
  •  3
  •   Rob Vanders    12 年前

    将当前日期时间追加到image src:

    <img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />
    
        5
  •  2
  •   RageZ    15 年前

    您可以通过使用HTTP头来控制缓存行为。

    在过去设置Expires头将强制浏览器不使用缓存版本。

    Expires: Sat, 26 Jul 1997 05:00:00 GMT
    

    你可以咨询 RFC 了解更多细节。

        6
  •  1
  •   Aaron Digulla    15 年前

    如果您查看浏览器和服务器之间交换的数据,您将看到浏览器将发送图像的HTTP头请求。结果将包含修改时间(但不包含实际图像数据)。如果服务器和浏览器上的图像发生更改,请确保这一次发生更改,然后再次下载该图像。

        7
  •  1
  •   Gianluca Demarinis    7 年前

    在PHP中,您可以使用这个技巧

    <img src="image.png?<?php echo time(); ?>" />
    

    函数的作用是:显示当前时间戳。每个页面加载都是不同的。因此,这段代码欺骗了浏览器:它读取了另一条路径,并且“认为”自从用户上次访问该站点以来,图像已经发生了更改。它必须重新下载,而不是使用高速缓存。

        8
  •  0
  •   Arvy    11 年前

    在PHP中,您可以发送随机数或当前时间戳:

    <img src="image.jpg?<?=Date('U')?>">
    

    <img src="image.jpg?<?=rand(1,32000)?>">
    
        9
  •  0
  •   stackFan    7 年前

    随机应变。只需使用一些随机数,并将其附加到图像文件名中。

    <img src="image.jpg?<?=rand(1,1000000)?>">
    
        10
  •  -1
  •   tijntest    9 年前

    结果不好,我想这是正确编程的方法。

     <td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>