一.浏览器为什么要缓存?什么会缓存下来?
首先当我们访问网页的时候,很多大的图片从服务器上传输过来的时候,试想一下,如果浏览器不把图片缓存下来而是每次都要到服务器去取,那么每次都给服务器和网络造成了巨大的负担。
对于静态资源来说,浏览器不会缓存html页面的,所以你每次改完html的页面的时候,html都是改完立即生效的,不存在什么有缓存导致页面不对的问题。浏览器缓存的东西有图片,css和js。这些资源将在缓存失效前调用的时候调用浏览器的缓存内容。
二.怎么让浏览器的缓存的东西不失效?
文档里有种说法是吧header中的Expires:设置为Sun, 17-Jan-2038 19:14:07 GMT,因为这个时间是32位unix支持的最大的时间值。
但是网上有种说法就是IIS6 最大的时间只能到31-Dec-2035
If you’re using IIS6 you’ll find that the UI won’t allow anything beyond 31-Dec-2035.
总之我们把这个时间设置到很大就可以了。下面是访问google时一个response返回的值。
补充一下,如果expires的时间为-1,那么缓存会立即失效。如果是一个将来时间,那么它将在将来时间失效。
三.怎么让浏览器不缓存静态资源?
一种方式就是让你的页面有这样的header,Cache-Control: no-cache header,这样浏览器就不会缓存静态资源了,每次取数据的时候都去服务器上重新获取。
补充一下,如果设置no-cache的时候对IE是有效的,但是对于firefox是不行的,如果让firefox也不缓存要在header中加一个Cache-Control: no-cache, no-store
另外一种方式就是让你的静态资后缀加上一个版本号,比如
<link rel="stylesheet" type="text/css" href="../css/icon.css?version=3.1.32(2013-05-31)"/>
如果这个version有改变的话,下次就会重新获取这个静态资源。这样做的好处就是由你来控制什么时候来获取新的版本的静态资源。
四.如果不设置这些浏览器用什么来控制缓存失效?
header中有一个参数叫Last-Modified ,这个是由服务器自动加上的,如果有这个参数,那么浏览器每次都会重新计算本地的cache。如果浏览器返回一个304的编码就表示资源没有改变,那么浏览器就可以使用本地的cache。
就如参考文档中说的,对于IE来说,如果没有设置expirse header的时候,IE的缓存时间就是一个session的时间,如果用户打开一个新的IE窗口的时候,他们就会获取最新的静态资源。但是对于firefox来说它就不是这样了,它是依赖last—modified的时间的(HTTP 1.1 spec RFC2616)。
Also, if the response does have a Last-Modified time, the heuristic expiration value SHOULD be no more than some fraction of the interval since that time. A typical setting of this fraction might be 10%.
也就是说firefox的失效时间=现在时间+0.1*(time-last-modified ),就是他将在它上一次修改时间的十分之一的时间差的时候失效。
为什么这么做呢?我们可以想象一个文件越久没有修改,那么它就越稳定,所以缓存的时间也就越长。只是这个时间差要除以10。
比如一个文件上次修改时间为100天之前,那么那10天后才会失效。
总结一下,以前对浏览器的缓存及失效了解的不是很透彻,具体是如何失效的也不太清楚,那么现在对于如何能改变缓存,永久缓存及合适能失效都有了比较详细的了解。另外要注意的就是IE和firefox的机制还是有很大区别的。
进一步参考文档:
http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
文章来源:http://my.oschina.net/zimingforever/blog/134914?fromerr=5ygd55ZT
相关推荐
浏览器缓存机制介绍与缓存策略剖析.pptx
浏览器缓存例子浏览器缓存例子浏览器缓存例子浏览器缓存例子浏览器缓存例子
js浏览器缓存.docjs浏览器缓存.docjs浏览器缓存.docjs浏览器缓存.doc
Loadrunner负载测试 浏览器缓存设置
jsp去除浏览器缓存
总结了浏览器缓存的原理,如何管理浏览器缓存
浏览器缓存目录设置,配合沙盘使用,不但会提升上网速度,而且还能减少磁盘碎片
三星T231如何清除浏览器缓存-T231清除浏览器缓存教程.docx
Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R)
Expires是一个较老的强缓存管理header,它包含一个GMT格式的绝对时间字符串,告诉浏览器在这个时间之前可以直接从浏览器缓存中加载资源,而无需去服务器校验。然而,Expires存在一个潜在的问题,那就是它依赖于...
这个软件可以将你在用浏览器观看视频时所缓存的视频文件在缓存文件夹里面提取出来,对于一些不会下载视频或者说不想安装各种客户端、不想注册各种网站的人来说,此程序绝对是一把利器! ps:压缩包里的主程序可以...
ChromeCacheView浏览器缓存读取工具 v1.56 汉化
浏览器缓存查看及恢复小工具。这是国外的软件
如果视频被储存在浏览器的缓存文件夹中,这个软件可以帮助你从缓存文件夹中找到该视频文件并保存到其他位置。 它会自动扫描IE、基于Mozilla的网页浏览器(包括FireFox)的整个缓存文件夹,并找出当前储存在里面的所有...
为了提高网页的访问效率,浏览器可以在本地缓存以前访问过的页面,当浏览器再次访问那些已经缓存了的页面时,浏览器就不用再去访问远程的Web服务器了,而是直接从本地取出缓存的内容。缓存提高了浏览器的访问效率,...
1、若是UC浏览器的视频文件:Y2hlbmppbmdjb25n0 Y2hlbmppbmdjb25n1 Y2hlbmppbmdjb25n2......用此工具类(合并无加密)。 2、若是0.ts、1.ts、2.ts类型视频合并到此:...
浏览器缓存【2024年浏览器缓存简介】 内容概要: 这篇博客为网络技术初学者提供了一个全面的理解浏览器缓存的知识。通过通俗易懂的语言,本博客介绍了浏览器缓存的工作原理,HTTP缓存控制字段,缓存策略的应用,以及...
IndexedDB,支持浏览器缓存
浏览器缓存【2024年浏览器缓存/HTTP缓存机制(面试常考)简介】 内容概要: 这篇博客为网络技术初学者提供了一个全面的理解浏览器缓存和HTTP缓存机制的指南。通过通俗易懂的语言,本博客介绍了浏览器缓存的工作原理...
浏览器缓存将文件保存...2.未过期的:在给定的时间内缓存,如果用户刷新或页面过期则去服务器请求,否则将读取本地的缓存,这样可以提高浏览速度。 3.过期的:也就是陈旧的页面,当请求这个页面时,必须进行重新获取。