现在的位置: 首页 > 综合 > 正文

关于Cache-Contro缓存

2013年08月01日 ⁄ 综合 ⁄ 共 827字 ⁄ 字号 评论关闭

浏览器缓存一直是web开发人员比较重视的优化点 
这要有这个几个http header来控制: 
Cache-Control中的max-age 
expires 
Last-Modified 
ETag 

其中max-age 和 expires可分在一组 
Last-Modified 和 ETag分在一组 
下面讲一下两组的区别 
max-age 和 expires 
当浏览器再次请求一个资源时会检查缓存响应中的max-age,如果没有过期则直接使用缓存中的数据,‘刷新’浏览器例外; 
expires的作用跟max-age一样,区别在于同时存在时max-age会覆盖expires 
max-age可用在image css js等不常变化的资源 

Last-Modified 和 ETag 
这个两个头跟上面的区别在于必须发送请求到服务器,服务器来判断是否发送响应体 
Last-Modified必须与If-Modified-Since配合使用 
工作过程如下: 
1 服务器发送带有Last-Modified头的响应给浏览器,浏览器缓存之 
2 再次请求改页面时,浏览器会把上次Last-Modified的时间用If-Modified-Since头发送给服务器 
3 服务器检查If-Modified-Since时间是否过期,如果过期发送新数据;否则发送304告诉浏览器缓存数据时有效的 

Etag的原理跟Last-Modified基本上是一样的 

上述两种缓存方式都可降低对服务器的压力, 节约了网络带宽 提高了服务器的处理能力 

另外gzip也是比较简单且有效的节约带宽方式 

============================================= 
刚才用etherreal抓包 
max-age=604800 时,浏览器不发送任何请求 
刷新浏览器则发送http get /images/aaa.gif 返回的是304状态

 

 

http://xuliangyong.javaeye.com/blog/606311

抱歉!评论已关闭.