缓存

上一篇 / 下一篇  2013-04-01 15:03:45 / 个人分类:java

一、浏览器缓存最大的价值是节省了带宽,浏览器缓存主要有两类

  缓存协商:Last-midifiedEtag

彻底缓存:cache-controlExpires

缓存信息都存储在客户端电脑上,IE存储位置:工具---Internet选项---》常规中浏览历史记录》设置---》查看文件。即可打开缓存文件夹。

缓存协商可应用在动态页面且实时性不是特别强的页面,如网站首页

1、缓存协商的意思是需要去服务器端询问页面有没有修改过,没有修改过则返回304直接使用缓存内容,否则返回新内容

  协商步骤:

  服务器发送带Last-midified:GMTtime头的http response

  浏览器下次请求时带上if-modified-since:GMTtime http请求头

  服务端用本地Last-midified时间与if-modified-since比较,计算浏览器数据是否过期并发送响应

  Etag工作原理与Last-midified类似,不同点在于Etag的值是用户可自定义的

2、彻底缓存的意思是在缓存失效之前不再需要跟服务器交互 常用的是ExpiresExpires的值是一个绝对时间,由服务器产生 这儿存在一个问题,就是服务器的时间可能给客户端的时间不一致导致缓存时间的偏差 。要解决这个问题就要使用cache-control,它保存的是一个相对浏览器的时间 。如果同时存在cache-controlExpires怎么办呢? 浏览器总是优先使用cache-control,如果没有cache-control才考虑Expires

二、四种缓存方式的详情。(况聪同学整理滴)  

1.Expires(过期时间)HTTP头信息

Expires(过期时间) 属性是HTTP控制缓存的基本手段,这个属性告诉缓存器:相关副本在多长时间内是新鲜的。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修 改。几乎所有的缓存服务器都支持Expires(过期时间)属性。

HTTP的日期时间必须是格林威治时 间(GMT),而不是本地时间。举例:
Expires: Fri, 30 Oct 1998 14:19:41

 

2.Cache-Control(缓存控制)HTTP头信息

HTTP 1.1介绍了另外一组头信息属性:Cache-Control响应头信息,让网站的发布者可以更全面的控制他们的内容,并定位过期时间的限制。
   
有用的Cache-Control响应头信息包括:

max-age=[]:缓存被认为是新鲜的最长时间,与过期时间类似。这个参数是基于请求时间的相对时间间隔,而不是绝对过期时间。[]是一个数字,单位是秒:从请求时间开始到过期时间之间的时间间隔(秒数)。

no-cache:强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。

   no-store:强制缓存在任何情况下都不要保留任何副本。

   must-revalidate:告诉缓存必须遵循所有你给予副本的新鲜度。

   max-stale:可以接受过去的对象,但是过期时间必须小于max-stale值。

min-fresh:接受其新鲜生命期大于其当前Agemin-fresh值之和的缓存对象。

 

3.Last-Modified/If-Modified-Since HTTP头信息

如果你第二次(或第三次,或第四次)请求相同的数据,你可以告诉服务器你上一次获得的最后修改日期:在你的请求中发送一个If-Modified-Since头信息,它包含了上一次从服务器连同数据所获得的日期。如果数据从那时起没有改变,服务器将返回一个特殊的HTTP状态代码304,这意味着从上一次请求后这个数据没有改变,因此不再重新发送数据。

 

4. ETag/If-None-Match

ETag是与最近修改数据检查同样功能的另一种方法:没有变化时不重新下载数据。其工作方式是:服务器发送你所请求的数据的同时,发送某种数据的hash (ETag头信息中给出)hash的确定完全取决于服务器。当第二次请求相同的数据时,你需要在If-None-Match:头信息中包含ETag hash,如果数据没有改变,服务器将返回304状态代码。

Expires/Cache-Control Header是控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据的头信息。只是Cache-ControlExpires可以控制的多一些, 而且Cache-Control会重写Expires的规则。


一、浏览器缓存最大的价值是节省了带宽,浏览器缓存主要有两类

  缓存协商:Last-midifiedEtag

彻底缓存:cache-controlExpires

缓存信息都存储在客户端电脑上,IE存储位置:工具---Internet选项---》常规中浏览历史记录》设置---》查看文件。即可打开缓存文件夹。

缓存协商可应用在动态页面且实时性不是特别强的页面,如网站首页

1、缓存协商的意思是需要去服务器端询问页面有没有修改过,没有修改过则返回304直接使用缓存内容,否则返回新内容

  协商步骤:

  服务器发送带Last-midified:GMTtime头的http response

  浏览器下次请求时带上if-modified-since:GMTtime http请求头

  服务端用本地Last-midified时间与if-modified-since比较,计算浏览器数据是否过期并发送响应

  Etag的工作原理与Last-midified类似,不同点在于Etag的值是用户可自定义的

2、彻底缓存的意思是在缓存失效之前不再需要跟服务器交互 常用的是ExpiresExpires的值是一个绝对时间,由服务器产生 这儿存在一个问题,就是服务器的时间可能给客户端的时间不一致导致缓存时间的偏差 。要解决这个问题就要使用cache-control,它保存的是一个相对浏览器的时间 。如果同时存在cache-controlExpires怎么办呢? 浏览器总是优先使用cache-control,如果没有cache-control才考虑Expires



TAG:

 

评分:0

我来说两句

Open Toolbar