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

小葫芦君(汉斯的博客)

博客迁移到新博客:https://blog.ssxingshou.com

 
 
 

日志

 
 
关于我

小小葫芦商城,为您提供高品质的商品,一流的产品,一流的包装服务,一流的物流服务,放心购买

网易考拉推荐

HTTP缓存:Last-Modified,ETag,Cache-Control,Expires  

2011-04-02 09:37:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  HTTP基础知识
  
  由于讨论涉及到客户端缓存,所以还是先要简单介绍一下HTTP协议是如何控制客户端缓存的,这里涉及到HTTP头的Last-Modified、ETag等属性。
  
  Last-Modified
  
  在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
  
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
  
  客户端第二次请求此URL时,会在头部加入一个属性,询问该时间之后文件是否有被修改过:
  
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
  
  如果服务器端的文件没有被修改过,则返回状态是304,内容为空,这样就节省了传输数据量。如果服务器端的文件被修改过,则返回和第一次请求时类似。
  
  ETag
  
  和Last-Modified类似,由于RFC2616(也就是HTTP/1.1)中没有说明ETag该是什么格式的,只要确保用双引号括起来就行了,所以你可以用文件的hash,甚至是直接用Last-Modified,以下是服务器端返回的格式:
  
ETag: "50b1c1d4f775c61:df3"
  
  客户端的查询更新格式是这样的:
  
If-None-Match: W/"50b1c1d4f775c61:df3"
  
  如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。
  
Expires
  
  这个属性就如我们在ASP中使用HttpResponse.ExpiresAbsolute一样直接,声明某某时刻过期之后浏览器就应该重新请求该URL,使用格式为:
  
Expires: Sun, 10 Feb 2002 16:00:00 GMT
  
  注意HttpResponse.ExpiresAbsolute在ASP.NET中是不建议使用的,现在我们应该使用的是HttpResponse.Cache.SetExpires。
  
  Pragma
  
  通常我们用到的值就是no-cache,这和在Cache-Control中使用no-cache值是一样的,Cache-Control在下面讲。Pragma的使用格式如下:
  
  Pragma: no-cache
  Cache-Control
  
  这是一个集合型属性,它里面能够包含很多子属性,并且允许用户扩展新的子属性。常见的子属性包括:
  
  max-age - 以秒为单位的超时,覆盖Expires属性。
  public - 允许保存在共享缓存中。
  private - 只允许保存在私有缓存中。
  no-cache - 不允许缓存。
  no-store - 不允许缓存在持久介质中。
  no-transform - 不允许转换存储系统。
  评论这张
 
阅读(1268)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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