一.浏览器为什么要缓存?什么会缓存下来?
首先当我们访问网页的时候,很多大的图片从服务器上传输过来的时候,试想一下,如果浏览器不把图片缓存下来而是每次都要到服务器去取,那么每次都给服务器和网络造成了巨大的负担。
对于静态资源来说,浏览器不会缓存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
相关推荐
浏览器缓存机制介绍与缓存策略剖析 浏览器缓存机制是指浏览器在请求资源时,对已经请求过的资源进行缓存,以便下次请求时可以直接从缓存中获取,从而提高页面加载速度和减少服务器的压力。本文将详细介绍浏览器缓存...
Expires 是 Web 服务器响应消息头字段,在响应 http 请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。Expires 的优点是可以减少服务器的负载,但其缺点是不能实时更新。 二、Cache...
`:设置页面过期时间为过去的时间,这意味着页面应该被浏览器视为过期,不会被缓存。 - `response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");`:设置`Cache-Control`头部,指示浏览器不要...
当再次访问相同网页时,浏览器会首先检查缓存,如果资源未过期,就直接从本地加载,提高页面加载速度。这涉及到HTTP协议中的Cache-Control、ETag、Last-Modified等头信息,用于控制缓存策略。 “浏览器缓存查看及...
### 浏览器缓存目录设置 在日常的网络浏览过程中,浏览器缓存的作用非常重要,它不仅能够提高网页加载速度,还能有效减少硬盘碎片的产生,进而提升整体系统的运行效率。本文将详细介绍如何针对不同浏览器(如Fire...
### JS浏览器缓存详解 #### 一、问题背景与概述 在进行Web开发的过程中,开发者可能会遇到一个较为隐蔽但十分常见的问题——浏览器缓存导致的重复请求失效现象。特别是使用某些JavaScript库(如Prototype.js)时,...
当用户再次访问已经浏览过的网页时,浏览器会尝试从本地缓存中加载这些资源,而不是重新从服务器请求,从而减少网络带宽的使用和加载时间。 Chrome浏览器提供了内置的缓存查看方式,但过程较为复杂,通常需要通过...
清除Flash缓存和各种浏览器缓存的方法 清除Flash缓存和各种浏览器缓存的方法是计算机用户常用的技术技能,以解决浏览器缓存引发的问题,如卡机、进不去、游戏滞后等问题。下面将详细介绍清除Flash缓存和各种浏览器...
2. **提升浏览速度**:清除过期或不必要的缓存可以减少加载时间,提高网页加载速度。 3. **保护隐私安全**:缓存中可能包含敏感信息,清除缓存有助于保护用户的隐私安全。 4. **解决兼容性问题**:有时网站更新后,...
1. **缓存文件浏览**:它能列出Chrome浏览器所有已缓存的文件,包括文件名、URL、文件大小、存储时间等详细信息,便于用户查找特定的缓存文件。 2. **按时间排序**:用户可以根据文件的存储时间进行排序,查看最近...
Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R) Microsoft edge 浏览器缓存改成内存虚拟盘(盘符R)
1. Cache-Control:控制缓存的行为,如`no-cache`(不缓存)、`max-age`(指定缓存有效期)、`max-stale`(接受过期但不超过指定时间的缓存)、`min-fresh`(要求对象新鲜度大于特定值)。 2. ETag:资源的唯一...
Expires是一个较老的强缓存管理header,它包含一个GMT格式的绝对时间字符串,告诉浏览器在这个时间之前可以直接从浏览器缓存中加载资源,而无需去服务器校验。然而,Expires存在一个潜在的问题,那就是它依赖于...
1、【合并视频.exe】可将UC浏览器缓存或下载的Y2hlbmppbmdjb25n加密或非加密视频文件合并成mp4视频的工具。 2、使用示例:https://img-blog.csdnimg.cn/0a29f18018c246ebbe70efb82f72c288.png 该示例图可以复制链接...
如果资源在强缓存中,并且未过期,那么浏览器将直接从缓存中加载,无需与服务器通信。这就是强缓存的作用,它可以极大地提高页面加载速度。 接下来是“浏览器缓存脑图文件”,它可能更直观地呈现了各种缓存策略、...
1. 提高网页访问速度:浏览器缓存可以将经常访问的网页内容存储在电脑里,从而减少网页加载时间,提高访问速度。 2. 节省带宽:浏览器缓存可以减少网页加载时所需的带宽,从而节省带宽和流量。 3. 降低服务器负载:...
如果当前时间晚于该时间,则认为缓存已过期。需要注意的是,该字段依赖于服务器时间和客户端时间的一致性,因此存在一定的不准确性。 - **Cache-Control**: HTTP/1.1中引入的新字段,用于提供更精细的缓存控制选项。...
1、若是UC浏览器的视频文件:Y2hlbmppbmdjb25n0 Y2hlbmppbmdjb25n1 Y2hlbmppbmdjb25n2......用此工具类(合并无加密)。 2、若是0.ts、1.ts、2.ts类型视频合并到此:...
浏览器会比较当前时间与过期时间,如果未过期则使用缓存。 2. 协商缓存: 当强缓存不适用,浏览器会向服务器发送一个验证请求,询问资源是否是最新的。这通常涉及两个响应头字段:`ETag`和`Last-Modified`。 - `...