如何强制浏览器清除缓存?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (1593)

有没有办法让我在页面上放置一些代码,这样当有人访问一个站点时,它会清除浏览器缓存,以便他们可以查看更改?

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

提问于
用户回答回答于

如果这是关于.css.js的更改,则“缓存清除”的一种方法是在每个发行版的文件名后添加“_versionNo”之类的内容。 例如:

script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.

或者在文件名之后执行:

script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.

你可以看看这个链接,看看它是如何工作的。

用户回答回答于

这儿是关于在ASP.NET中设置缓存的MDSN页。

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.Cache.SetValidUntilExpires(False)
Response.Cache.VaryByParams("Category") = True

If Response.Cache.VaryByParams("Category") Then
   '...
End If
用户回答回答于

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

服务器将返回NOT MODIFIED的304错误响应,浏览器将不得不使用其缓存。如果etag未在服务器端进行验证,或者修改日期低于当前修改日期,则服务器应使用新的修改日期或etags或两者返回新内容。

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

这是应该如何完成的。在网址中使用随机参数或版本号更像是一种黑客攻击。

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 /

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

如果人们往往更新很多,并且文件没有改变很多,那么设置一个大的失效日期可能是明智的。

用户回答回答于

我有一个案例,我会在线拍摄客户照片,如果照片发生变化,需要更新div。 浏览器仍然显示旧照片。 所以我使用了调用随机GET变量的方法,每次都是唯一的。 这是它能帮助任何人

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

以下是更有效的解决方案,因为它只会在更改图像时才重新加载图像,并通过文件大小来识别此更改:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"
用户回答回答于
  1. index.html我添加了manifest:<html manifest="cache.manifest">
  2. <head>部分包括更新缓存的脚本:<script type="text/javascript" src="update\_cache.js"></script>
  3. <body>第一节插入了onload函数:<body onload="checkForUpdate()">
  4. cache.manifest我已经放好了所有要缓存的文件。 现在重要的是它只适用于我的情况(Apache),只需每次更新“版本”注释即可。 这也是一个选项,用“?ver = 001”或名称末尾的名称命名文件,但不需要。 只更改#版本1.01会触发缓存更新事件。CACHE MANIFEST#版本1.01 style.css imgs / logo.png#所有其他文件包括1.,2.和3.点只在index.html中。弄到http://foo.bar/resource.ext NET :: ERR _FAILED发生是因为每个“子”文件都试图在页已缓存时缓存该页。
  5. update_cache.js我把这段代码放在文件中:

function checkForUpdate() { if (window.applicationCache != undefined && window.applicationCache != null) { window.applicationCache.addEventListener('updateready', updateApplication); } } function updateApplication(event) { if (window.applicationCache.status != 4) return; window.applicationCache.removeEventListener('updateready', updateApplication); window.applicationCache.swapCache(); window.location.reload(); }

现在只需更改文件,并且在清单中必须更新版本注释。现在,访问index.html页面将更新缓存。

用户回答回答于

对于静态资源,正确的缓存就是使用具有每个部署或文件版本值的查询参数。 这将在每次部署后清除缓存。

/Content/css/Site.css?version={FileVersionNumber}

这是ASP.NET MVC实例。

<link href="@Url.Content("~/Content/Css/Reset.css")?version=@this.GetType().Assembly.GetName().Version" rel="stylesheet" type="text/css" />

不要忘记更新程序集版本。

用户回答回答于

不是这样的。一种方法是在传递内容时发送适当的标头,以迫使浏览器重新加载:

如果你在SO上搜索“cache header”或类似的东西,你会发现ASP.NET特定的例子。

另一种方式,如果无法控制服务器端的标题,干净程度较低但有时只是一种方法,它将随机GET参数添加到正在调用的资源中:

myimage.gif?random=1923849839
用户回答回答于

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

此功能正在从Web平台中删除。 (这是一个漫长的过程,需要很多年的时间。)目前使用任何脱机Web应用程序功能都非常令人沮丧。 改用服务人员。

我也是使用应用程序缓存在我2012引用的MozillaDeveloperNetwork上:

弃用

  该功能已从Web标准中删除。 尽管一些浏览器可能仍然支持它,但它正在被丢弃。 不要在旧项目或新项目中使用它。 使用它的页面或Web应用程序可能会随时中断。

另见bug 1204581-如果启用了服务工作者获取拦截,则为AppCache添加一个弃用通知。...

用户回答回答于

查看缓存控制过期META标记。

<META HTTP-EQUIV =“CACHE-CONTROL”CONTENT =“NO-CACHE”>

  <META HTTP-EQUIV =“EXPIRES”CONTENT =“Mon,22 Jul 2002 11:12:01 GMT”>

另一种常见做法是将不断变化的字符串附加到所请求文件的末尾。 例如:

<script type =“text / javascript”src =“main.js?v = 12392823”> </ script>

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励