`
ymfhcn
  • 浏览: 31128 次
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

怎么避免浏览器缓存静态文件(转)

阅读更多

对于动态文件,比如 index.asp?id=...  或者 index.aspx?id=... 相信有经验的程序员都知道怎样禁止浏览器缓存数据了.
但是对于静态文件(css,jpg,gif等等), 在什么场合下面我们需要禁止浏览器缓存他们,怎么做?

本文讨论的主题是如何防缓存, 尤其是如何防止静态文件被缓存..


在  RE:对博客园URL的一些调整建议, 二级域名不利于客户端浏览器缓存 一文中,我提到了怎么最大化的
利用浏览器缓存功能,来提高客户端浏览速度, 减轻服务器负担的.

但是事物总是一分为二的,并不是所有的场合都要使用缓存的. 有时候我们的数据被缓存了反而会给我们带来麻烦.

对于动态数据(从数据库读取生成的那些),我们可以通过以下方法来禁止浏览器缓存。

'asp 为例 禁止缓存

Response.Buffer 
= True 
Response.ExpiresAbsolute 
= Now() - 1 
Response.Expires 
= 0 
Response.CacheControl 
= "no-cache" 
Response.AddHeader 
"Pragma""No-Cache" 

对于Ajax 的请求(不管是静态数据还是动态数据):

//以下三种方法使用其中任何一种方法都可以
xmlhttp.setRequestHeader("Cache-Control","no-cache");  
//或者
xmlhttp.setRequestHeader("If-Modified-Since","0");
//或者
xmlhttp.Open(url+'?rnd='+Math.random(),....)

如果使用 prototype.js  , 用类似这样的代码 
new Ajax.Request(url,{method:"get",requestHeaders:["Cache-Control","no-cache"]})
或者
new Ajax.Request(url,{method:"get",requestHeaders:["If-Modified-Since","0"]})
 

什么情况下,要禁止静态文件缓存:
1、经常可能要改动的 js, css.
       比如 一个html 文件, test.html 在 1.0版本中。可能是这样
     <script src="common.js"></script>
     修改后  v1.1版本:
 <script src="common.js"></script>
 <script src="foo.js"></script>
   新增加了一个foo.js  同时,也改动了common.js , 在common.js 中定义了新的类,并在foo.js 中使用了common.js. 

在这种情况下如果以前用户浏览过 1.0版本的 html 文件,那么他的浏览器自动缓存了 common.js
当他浏览新版本的时候,因为使用的是 v1.1的 foo.js 和 v1.0的 common.js ,这样将导致脚本出错。


解决方法探讨:
  因为css,js 是通过 <script src=....> 这种方式加载的,所以,很难使用 asp 的那种服务器端禁止缓存的办法。也很难使用ajax的通过设置 http请求头的办法禁止使用缓存。

看来随机数是个好办法。

//方法一:
document.write("<script src='test.js?rnd="+Math.random()+"'></s"+"cript>")

//方法二:
var js=document.createElement("script")
js.src
="test.js"+Math.random()
document.body.appendChild(js)


但是,如果采用随机数的话, js文件将永远得不到缓存,每次都必须重新从服务器加载,即使没有任何更改。
大家如果经常上国外网站的话,可以看到他们通常采用这样的方式来解决:
<script src="test.js?ver=113"></script>
其中 ver=113 的 113就是版本号,一般都是采用 CVS 或其他工具生成的开发版本号。

这样真正做到了应该缓存的时候缓存静态文件,当版本有更新的时候从获取最新的版本,并更新缓存。
对于图像 <img src="test.jps?ver=在CVS的版本号"> 来有效利用和更新缓存.


唉,现在在CSDN的Web版,不知道有多少人在重复问着同一个问题。“怎么通过程序删除清空客户端的浏览器缓存”.........

分享到:
评论

相关推荐

    nginx静态文件缓存的解决方案1

    【Nginx 静态文件缓存解决方案】 Nginx 是一款高性能的 HTTP 和反向代理服务器,常用于处理静态资源,以减轻后端服务器的压力。为了进一步提高静态资源的访问效率,我们可以利用 Nginx 的缓存功能。下面详细介绍...

    HTTP+JS+浏览器缓存技术

    浏览器缓存是指浏览器在本地磁盘上存储的静态资源文件,包括HTML、CSS、JavaScript、图片等,以便下一次请求时可以直接从缓存中读取,从而提高网站性能和浏览器速度。浏览器缓存机制可以分为两大类:Expires 策略和 ...

    浏览器缓存查看及恢复工具

    浏览器缓存是网络浏览的重要组成部分,它帮助用户快速加载先前访问过的网页,通过存储静态资源如图片、JavaScript和CSS文件,减少对服务器的请求。本文将深入探讨浏览器缓存的工作原理,以及如何使用“浏览器缓存...

    浏览器缓存例子浏览器缓存例子浏览器缓存例子浏览器缓存例子

    `www`可能是存放项目静态文件的目录,如HTML、CSS、JS等,它们在浏览器缓存中起着关键作用。 总之,了解并有效地利用浏览器缓存机制,是提升网站性能和用户体验的重要手段。通过合理的配置和管理,可以显著减少网络...

    浏览器缓存读取工具

    浏览器缓存是网络浏览的重要组成部分,它用于存储网页的静态资源,如图片、JavaScript文件、CSS样式表等,以便在用户再次访问同一页面时能够快速加载,提高网页的响应速度和用户体验。`ChromeCacheView`是一款实用的...

    chrome浏览器缓存查看工具

    用户应该仔细阅读这个文件,以确保正确无误地使用Chrome浏览器缓存查看工具,避免可能遇到的问题。例如,它可能会提醒用户备份重要数据,因为清理或修改浏览器缓存可能会影响已保存的登录信息和浏览历史。 总的来说...

    一键删除IE浏览器缓存脚本

    浏览器缓存存储了访问过的网页的静态资源,如图片和JavaScript文件,以加快后续访问的速度。然而,有时缓存可能会导致问题,比如显示旧版本的网页或者占用过多硬盘空间,这时就需要清理。通过使用这样的脚本,用户...

    Spring Boot Web 静态文件缓存处理的方法

    在本文中,我们将介绍使用 Spring Boot 的缓存机制来缓存静态文件,从而提高页面加载速度。 一、静态文件缓存处理的必要性 当我们在 PC 上访问 Web 项目时,静态文件的加载速度影响不大,但是当在移动设备上访问时...

    web项目页面缓存清除,不用每次刷新浏览器

    例如,设置Cache-Control为`no-cache`或`no-store`可以防止浏览器缓存页面,`must-revalidate`则要求每次请求都验证资源是否更新。 2. **HTML5的Service Worker**:Service Worker是一种在浏览器后台运行的脚本,它...

    infrared-remote-浏览器缓存demo

    解压并研究这些文件,我们可以更深入地了解如何结合浏览器缓存技术来优化一个实际的红外遥控应用。 总的来说,这个demo为学习和实践浏览器缓存提供了一个有趣的实例,帮助开发者理解如何通过缓存策略提升网页性能,...

    Flask缓存静态文件的具体方法

    总结一下,Flask中缓存静态文件的方法主要包括:理解浏览器缓存机制、通过修改`SEND_FILE_MAX_AGE_DEFAULT`配置调整缓存时间、自定义`url_for`函数以及使用Flask-Assets扩展。选择哪种方法取决于你的具体需求,开发...

    如何清除浏览器缓存.doc

    浏览器缓存是网络浏览中的一个重要概念,它是一个存储在用户计算机本地的数据空间,用来暂时保存网页的静态资源,如图片、CSS样式表、JavaScript文件等。这样,当用户再次访问同一网页时,浏览器可以直接从缓存中...

    一键解决web开发用户浏览器静态资源缓存问题的工具

    处理web静态资源文件在客户端浏览器缓存的工具,java编写的小程序工具。 主要处理js和css文件,将指定目录下所有匹配的js和css文件添加特定的版本号作为文件名,并处理指定目录下所有html文件中对该js或css的引用。 ...

    nginx访问静态文件不下载.rar

    标题 "nginx访问静态文件不下载" 暗示了用户可能遇到了在使用Nginx服务器时,尝试访问静态文件(如HTML、CSS、JavaScript或图片等)却导致浏览器下载文件而不是正常显示的情况。Nginx是一款高性能的HTTP和反向代理...

    浏览器缓存

    在Java开发中,浏览器缓存是一个常见的问题,特别是在动态网页应用中,如JSP。当用户更新了页面上的内容,比如修改了客服人员的头像,但刷新页面后,旧的图像可能仍然显示,这就是浏览器缓存导致的现象。浏览器缓存...

    360浏览器缓存保存在什么地方.docx

    浏览器缓存是网络浏览过程中非常重要的一个组成部分,它主要用于存储网页上的静态资源,如图片、JavaScript文件、CSS样式表等,以便用户再次访问同一网页时能够快速加载,提高浏览速度和用户体验。360浏览器作为一款...

    如何在nginx中配置缓存静态文件

    这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件)。 1、准备事项 我想你需要一个正常工作的 nginx 软件,就像这篇教程里展示的:在Ubuntu 16.04 ...

    初探浏览器缓存实现原理-提高性能

    浏览器缓存是优化网站性能的关键技术之一,通过在客户端存储网页资源,如HTML、CSS、JavaScript文件和图片等,减少对网络带宽的消耗,加快页面加载速度,提升用户体验,并减轻服务器的压力。本文将深入探讨浏览器...

    禁止IIS缓存静态文件的方法(png,js,html等)

    因此,当需要禁用IIS缓存静态文件时,需要从IIS服务器本身配置入手。一个有效的方法是修改IIS配置文件Metabase.xml来禁止IIS缓存特定目录下的静态文件。具体步骤包括: 1. 设置IIS允许运行时编辑Metabase.xml文件。...

    浏览器缓存问题处理

    浏览器缓存是Web开发中一个重要的概念,它能够提高网页加载速度,减少网络带宽消耗,但同时也可能导致用户无法获取到最新的更新,特别是在项目发布时。本文将详细讲解浏览器缓存的工作原理,以及如何处理浏览器缓存...

Global site tag (gtag.js) - Google Analytics