码迷,mamicode.com
首页 > Web开发 > 详细

《http权威指南》读书笔记 四

时间:2015-05-05 16:46:25      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:http缓存

缓存


缓存的再验证:

由于原始服务器上的文件随时可能会变化,因此缓存需要不时的对其进行检测,对比本地的缓存是否与原始服务器上的相同,这种“新鲜度检测”即为再验证。

再验证进行的频率:

大部分缓存只有在客户端发起请求,并且本地缓存副本旧的足以需要检测的时候,才会进行再验证。

验证缓存时,会向服务端发送一个很小的验证请求,如果内容没有变化(即缓存有效),服务器会返回一个304 Not Modified。

缓存再验证工具:If-Modified-Since首部

将If-Modified-Since首部添加在GET请求中时,表示只有在缓存了对象的副本,但是对该副本进行了修改的情况下,服务器才会返回该对象。

服务器内容未修改:返回304 Not Modified

服务器内容被修改:返回带有HTTP 200 OK的普通相应

服务器内容已删掉:返回404 Not Found


http的date首部:date后面的日期是原始服务器第一次响应该请求时的时间。


缓存新鲜度的保持:Expires和Cache-Control:max-age方法

Expires和Cache-Control:max-age都是为缓存有效期设定一个时间。两者不同的是Expires设定的是一个绝对时间,而Cache-Control:max-age设定的是一个以秒为单位的相对时间。

例:

Cache-Control:max-age=3600 表示服务器从第一次产生一个请求的文档起,3600秒后该文档的缓存失效。

Expires:Tue, 05 May 2015 06:29:00 GMT 表示缓存在2015年5月5日6:29:00(格林尼治时间,北京时间需加8)失效。

如果缓存内容超过了以上方法设定的时间,需要与服务器进行再验证。

缓存再验证需要的两个条件首部:If-Modified-Since:和If-None-Match:

1、If-Modified-Since:如果在指定的日期之后,文档被修改过,就会向服务器发出请求。

如果在指定的日期后,文档被修改,那么If-Modified-Since条件就为真,然后执行GET请求,得到一个新的日期。

如果指定的日期后,文档没有被修改,那么If-Modified-Since条件就为假,服务端会返回一个304 Not Modified,不会返回报文主体。

2、If-None-Match:服务器对每个文档设置一个特殊的标签(ETag),如果缓存文档标签与该文档在服务器中的标签不同(并不是根据文档的修改时间),If-None-Match首部就会执行所请求的方法。

如果客户端请求首部包含If-None-Match:"v1.0" 条件,服务端会将If-None-Match后面的ETag标签"v1.0"与本地文档的ETag标签对比。如果相同,则返回304 Not Modified,并且响应报文中包含:ETag:"v1.0";如果ETag标签不同,则返回200 OK以及新的ETag。

If-None-Match:后面可以包含多个ETag标签。


《http权威指南》读书笔记 四

标签:http缓存

原文地址:http://ahaii.blog.51cto.com/1695127/1642115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!