注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

Http - 缓存  

2010-09-14 20:45:53|  分类: 软件架构与设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  文章声明

作者:傲风(aofengblog@163.com)       编写时间:2010年09月14日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容!



HTTP缓存 / Http Cache

1、ETag
Http1.1中没有规定ETag的格式和生成方式,只要求用双引号括起来。因此可以用MD5,或者直接用文件的最后修改时间。Tomcat就采用 文件大小 + "-" + 文件最后修改时间的毫秒数 来生成ETag。
Etag 与 If-None-Match 对应。
第一次请求时,服务端响应头中有ETag(红色下划线所示)。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 
第二次请求时,请求头中就带有If-None-Match(红色下划线所示)。服务器判断请求头中 If-None-Match 与服务端计算的ETag是否一致,如果一致就表示没有更新,返回304,否则按第一次请求时处理。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 
 
2、Last-Modified
Last-Modified与If-Modified-Since对应。
第一次请求时,响应头中带有 Last-Modified(蓝色下划线所示),格式如:Wed, 22 Jul 2009 07:08:07 GMT,是零时区的 GMT 时间。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 
第二次请求时,请求头中就带有If-Modified-Since(蓝色下划线所示)。服务器判断请求头中If-Modified-Since与请求资源的最后修改时间是否一致,如果一致就表示资源没有更新,返回304,否则按第一次请求时处理。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 

3、Cache-Control
Cache-Control是一个集合属性,可以包含多个子属性。
  • max-age - 以秒为单位的超时,覆盖Expires属性。
  • public - 允许保存在共享缓存中。
  • private - 只允许保存在私有缓存中。
  • no-cache - 不允许缓存。
  • no-store - 不允许缓存在持久介质中。
  • no-transform - 不允许转换存储系统。
第一次请求时,响应头中带有Cache-Control(红色下划线所示)。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
 

第二次请求时,浏览器判断Cache-Control,如果是max-age并且其值有效(在有效的缓存时间内),浏览器直接使用本地缓存,不向服务端发送请求,否则按第一次请求处理;如果是no-cache和no-store,不缓存,每次都是重新向服务端请求。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
说明:
在firebug中,使用本地缓存时,资源名称会变成灰色

4、Expires
第一次请求时,响应头中带有 Expires(蓝色下划线所示),格式如:Wed, 22 Jul 2009 07:08:07 GMT,是零时区的 GMT 时间。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来

第二次请求时,浏览器判断Expires,如果Expires是有效的,浏览器直接使用本地缓存,不向服务端发送请求,否则按第一次请求处理。
Http - 缓存 - 傲风 - 宝剑锋从磨砺出 梅花香自苦寒来
说明:在firebug中,使用本地缓存时,资源名称会变成灰色


5、附录
1、Cache-Control和Expires对F5和Ctrl+F5无效。当按F5刷新或按Ctrl+F5强制刷新时,IE和Firefox都会忽视本地缓存,重新向服务端发起请求。
Firefox IE
刷新 F5       
Cache-Control: max-age=0
强制刷新 Ctrl+F5
Pragma: no-cache
Cache-Control: no-cache
刷新 F5
If-Modified-Since: Sun, 21 Nov 2004 14:35:21 GMT
If-None-Match: "14f598-916-a64a7c40"
强制刷新 Ctrl+F5
Cache-Control: no-cache

2、在多服务器部署的架构模式下,ETag有时反而会影响性能,这和ETag的具体算法有关系。


<正文结束>
  评论这张
 
阅读(1228)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017