当前位置:  开发笔记 > 前端 > 正文

如何强制Web浏览器不缓存图像

如何解决《如何强制Web浏览器不缓存图像》经验,为你挑选了7个好方法。

Armin Ronacher有正确的想法.问题是随机字符串可能会发生冲突.我会用:


其中"1222259157.415"是服务器上的当前时间.(注意:我使用python的time.time()来生成)



1> epochwolf..:

Armin Ronacher有正确的想法.问题是随机字符串可能会发生冲突.我会用:


其中"1222259157.415"是服务器上的当前时间.(注意:我使用python的time.time()来生成)


而不是添加服务器时间(这将完全阻止缓存),为什么不在'?'之后添加文件的最后修改时间.这样,图像将被正常缓存,直到下一次更改.
一个重要的补充是,你永远不能_force_浏览器做任何事情.你所能做的就是提出友好的建议.这取决于浏览器和用户实际遵循这些建议.浏览器可以忽略这一点,或者用户可以覆盖默认值.
乔尔,你最好在你自己的答案中补充一点.
Doin的最后评论必须得到投票!智能缓存确实很重要,为什么有人必须一遍又一遍地下载同一个文件?
@Danjah,用静态文件管理会很烦人.

2> Armin Ronach..:

简单修复:将随机查询字符串附加到图像:


HTTP RFC说的是什么:

Cache-Control: no-cache

但那不是很好:)



3> 小智..:

我使用PHP的文件修改时间函数,例如:

echo ";

如果更改图像,则使用新图像而不是缓存图像,因为具有不同的修改时间戳.



4> x-yuri..:

我会用:


其中"20130910043254"是文件的修改时间.

上传图像时,其文件名不会保留在数据库中.它被重命名为Image.jpg(在使用时简单地说出来).使用新图像替换现有图像时,名称也不会更改.只是图像文件的内容发生了变化.

我认为有两种类型的简单解决方案:1)首先想到的解决方案(直截了当的解决方案,因为它们很容易想出来),2)你在思考之后最终得到的解决方案(因为它们很容易使用).显然,如果你选择考虑事情,你不会总是受益.但我相信,第二种选择被低估了.试想为什么php如此受欢迎;)



5> 小智..:

您可以编写一个代理脚本来提供图像 - 虽然这有点多了.有点喜欢这个:

HTML:


脚本:

// PHP
if( isset( $_GET['img'] ) && is_file( IMG_PATH . $_GET['img'] ) ) {

  // read contents
  $f = open( IMG_PATH . $_GET['img'] );
  $img = $f.read();
  $f.close();

  // no-cache headers - complete set
  // these copied from [php.net/header][1], tested myself - works
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Some time in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
  header("Cache-Control: no-store, no-cache, must-revalidate"); 
  header("Cache-Control: post-check=0, pre-check=0", false); 
  header("Pragma: no-cache"); 

  // image related headers
  header('Accept-Ranges: bytes');
  header('Content-Length: '.strlen( $img )); // How many bytes we're going to send
  header('Content-Type: image/jpeg'); // or image/png etc

  // actual image
  echo $img;
  exit();
}

实际上,图像src上的无缓存标头或随机数应该足够了,但是因为我们想要防弹..



6> 小智..:

使用Class =“ NO-CACHE”

范例html:

jQuery的:

    $(document).ready(function ()
    {           
        $('.NO-CACHE').attr('src',function () { return $(this).attr('src') + "?a=" + Math.random() });
    });

javascript:

var nods = document.getElementsByClassName('NO-CACHE');
for (var i = 0; i < nods.length; i++)
{
    nods[i].attributes['src'].value += "?a=" + Math.random();
}

结果:src =“ images / img1.jpg” => src =“ images / img1.jpg?a = 0.08749723793963926”



7> 小智..:

我是一个新的编码器,但这是我想出来的,阻止浏览器缓存并保持我的网络摄像头视图:










不知道什么在什么浏览器上工作,但它确实适用于某些人:IE:当网页刷新和网站重新访问时(无需刷新).CHROME:仅在刷新网页时才有效(即使在重新访问后).SAFARI和iPad:不起作用,我必须清除历史和Web数据.

关于SAFARI/iPad的任何想法?

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有