《HTTP权威指南》 – 11.验证码和新鲜度

服务器应当告知客户端能够将内容缓存多长时间,在这个时间内就是新鲜的。服务器可以用这两个首部之一来提供信息:

  1. Expires(过期)
  2. Cache - Control(缓存控制)

Expires首部 规定文档“过期”的具体时间:

语法:Expires :Sun Mar 18 23 :59:59 GMT 2001。

Cache-Control 首部可以用秒数来规定文档最长使用期:从文档离开服务器之后算起的总计时间。

Cache-Control 首部的指令:

  • no - cache 请求:在重新向服务器验证之前,不要返回文档的缓存副本;
  • no - stroe 请求:不要返回文档的缓存副本,不要保存服务器的相应;
  • max - stble请求:文档允许过期,但不能超过指令中指定的过期指;
  • min - fresh请求:文档的使用期不能小于这个指定的时间与它的当前存活时间只和,也就是说:响应必须至少在指定的这段时间内保持新鲜;
  • max - age 请求:缓存中的文档不能超过指定的使用期;
  • no - transform请求:文档在发送之前不允许被转换;
  • only - if - cached请求:只有文档在缓存中才发送,不要联系原始服务器;

  • public 响应:响应可以被任何服务器缓存;
  • private 响应:响应可以被缓存,但只能被单个客户端访问;
  • no - cache 响应:如果该指令伴随一个首部列表的话,那么内容可以被缓存并提供给客户端,但必须先删除所列出的首部。如果没有指定首部,缓存中的副本在没有重新向服务器验证之前不能提供给客户端;
  • no - store 响应:响应不允许被缓存;
  • no - transform 响应:响应在提供给客户端之前不能做任何形式的修改;
  • must - revelidate 响应:响应在提供给客户端之前必须更新向服务器验证;
  • proxy - revelidate 响应:共享的缓存在提供给客户端之前必须重新向服务器验证,私有的缓存可以忽略;
  • max - age 响应:指定文档可以被缓存的时间以及新鲜度的最长时间;
  • s - max - age 响应:指定文档作为共享缓存时的最长使用时间,私有缓存可以忽略;

有条件的请求与验证码:

HTTP为客户端提供了一种方法,仅当资源改变时才请求副本,这种特殊请求成为有条件的请求。

例如:某个缓存服务器可能发送下面的有条件报文给服务器,仅当文件 / hello.html2002年6月29日 之后发生改变的情况下才发送它:

GET / hello.html HTTP / 1.0   If - Modified - Since : Sat : 29 Jan 2002 14:30:00 GMT;
有条件的请求通常是以 `If - ` 开头的首部来实现的。

有条件的请求类型:

If-Modified-Since  Last-Modified          
如果在前一条响应的 Last-Modified 首部中说明的时间之后,资源的版本发生变化,就发送副本;

If-UnModified-Since  Last-Modified           
仅在前一条响应的 Last-Modified 首部中说明的时间之后,资源的副本没有变化,才发送副本;

If-Match  ETag
如果实体的标记与前一次首部中的ETag相同,就发送该资源的副本;

If-None-Match  ETag
如果实体的标记与前一次响应首部中的ETag不同,就发送该资源的副本; 

### 图灵图书 -- HTTP权威指南

豆瓣读书 -- HTTP权威指南

posted @ 2015-12-10 17:58  洋芋土豆  阅读(233)  评论(0编辑  收藏  举报