有没有一种方法可以让我把一些代码放在我的页面上,这样当有人访问一个网站时,它就会清空浏览器缓存,这样他们就可以查看更改了?

使用语言:ASP。净,VB。NET,当然还有HTML, CSS和jQuery。


当前回答

我有一个案例,我将在线拍摄客户端的照片,如果照片被更改,就需要更新div。浏览器仍然显示着旧照片。因此,我使用了调用随机GET变量的方法,该变量每次都是唯一的。这就是它,如果它能帮助到任何人的话

<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...

编辑 正如其他人指出的那样,下面是更有效的解决方案,因为它只会在图像被更改时重新加载图像,通过文件大小识别这种更改:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"

其他回答

不确定这是否真的对你有帮助,但这就是缓存在任何浏览器上的工作方式。当浏览器请求一个文件时,它应该总是向服务器发送请求,除非存在“脱机”模式。服务器将读取一些参数,如日期修改或标记。

服务器将为NOT MODIFIED返回一个304错误响应,浏览器将不得不使用它的缓存。如果标签在服务器端没有验证,或者修改的日期低于当前修改的日期,服务器应该返回带有新的修改日期或标签或两者的新内容。

如果没有缓存数据发送到浏览器,我猜行为是不确定的,浏览器可能会或可能不会缓存文件,不告诉他们是如何缓存的。如果您在响应中设置了缓存参数,它将正确缓存您的文件,然后服务器可能会选择返回一个304错误,或者返回新的内容。

这是应该做的。在url中使用随机参数或版本号更像一个黑客。

http://www.checkupdown.com/status/E304.html http://en.wikipedia.org/wiki/HTTP_ETag http://www.xpertdeveloper.com/2011/03/last-modified-header-vs-expire-header-vs-etag/

看了之后,我看到还有一个过期日期。如果你有问题,可能是因为你设置了过期日期。换句话说,当浏览器缓存你的文件时,因为它有一个有效期,所以它不应该在这个日期之前再次请求它。换句话说,它永远不会向服务器请求文件,也永远不会收到一个未修改的304。它将简单地使用缓存,直到达到过期日期或缓存被清除为止。

所以这是我的猜测,你有某种有效期,你应该使用最后修改标签或它们的混合,并确保没有过期日期。

如果人们倾向于频繁地刷新文件,而文件不会经常更改,那么设置一个大的过期日期可能是明智的。

我的2分钱!

<meta http-equiv="pragma" content="no-cache" />

参见https://stackoverflow.com/questions/126772/how-to-force-a-web-browser-not-to-cache-images

我有一个案例,我将在线拍摄客户端的照片,如果照片被更改,就需要更新div。浏览器仍然显示着旧照片。因此,我使用了调用随机GET变量的方法,该变量每次都是唯一的。这就是它,如果它能帮助到任何人的话

<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...

编辑 正如其他人指出的那样,下面是更有效的解决方案,因为它只会在图像被更改时重新加载图像,通过文件大小识别这种更改:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"

并非如此。一种方法是在传递内容时发送适当的头文件,以迫使浏览器重新加载:

确保网页没有在所有浏览器上缓存。

如果你在SO上搜索“缓存头”或类似的东西,你会发现ASP。NET特定的示例。

另一种不太清晰但有时是唯一的方法,如果你不能控制服务器端的头,就是给被调用的资源添加一个随机的GET参数:

myimage.gif?random=1923849839

更新2012

这是一个老问题,但我认为它需要一个更最新的答案,因为现在有一种方法可以更好地控制网站缓存。

在离线Web应用程序(实际上是任何HTML5网站)中,applicationCache.swapCache()可以用来更新网站的缓存版本,而不需要手动重新加载页面。

这是一个来自HTML5 Rocks上使用应用程序缓存的初学者指南的代码示例,解释了如何将用户更新到站点的最新版本:

// Check if a new cache is available on page load.
window.addEventListener('load', function(e) {

  window.applicationCache.addEventListener('updateready', function(e) {
    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
      // Browser downloaded a new app cache.
      // Swap it in and reload the page to get the new hotness.
      window.applicationCache.swapCache();
      if (confirm('A new version of this site is available. Load it?')) {
        window.location.reload();
      }
    } else {
      // Manifest didn't changed. Nothing new to server.
    }
  }, false);

}, false);

有关更多信息,请参见在Mozilla开发者网络上使用应用程序缓存。

更新2016

网络上的事物变化很快。 这个问题是在2009年提出的,在2012年,我发布了一篇关于处理问题中描述的问题的新方法的更新。又过了4年,现在看来它已经被弃用了。感谢cgaldiolo在评论中指出这一点。

目前,截至2016年7月,HTML标准,第7.9节,脱机Web应用程序包括一个弃用警告:

这个特性正在从Web平台上移除。 (这是一个漫长的过程,需要很多年。)使用任何 此时非常不鼓励使用离线Web应用程序特性。 使用服务工作者代替。

在Mozilla开发者网络上使用应用程序缓存也是如此,我在2012年引用过:

已弃用该特性已从Web标准中移除。 虽然一些浏览器可能仍然支持它,但它仍在开发过程中 被删除。不要在旧的或新的项目中使用它。页面或Web应用程序 使用它可能会随时损坏。

请参见Bug 1204581 -如果启用service worker获取拦截,为AppCache添加弃用通知。