上一章介绍了缓存新鲜度判断的基本原理,本章对于缓存新鲜度判断方法进行一些补充(更新间隔略长略长。。)。

          关于缓存的TIPS

  服务器可以通过http定义的几种header对可以缓存数据的存在时间进行控制,按照其优先级由高到低分别为

  1. Cache-Control:no-store
  2. Cache-Control:no-cache
  3. Cache-Control:must-revalidata
  4. Cache-Control:  max-age=
  5. Expires:{date}
  6. 不附加任何信息

  Cache-Control:no-store 首部会禁止缓存对于响应进行复制,响应由服务器回送出,然后由缓存转发到客户端,转发完毕后会把缓存上的响应副本删除。

  Cache-Control:no-cache 实际上是允许响应缓存在本地缓存中的,只不过要使用缓存中的文件,则必须与原始服务器通信,验证缓存内容是否足够新鲜。如果足够新鲜才可以会送给客户端使用。

  Cache-Control:must-revalidata 有些缓存为了提高性能,会选择性的向客户端提供一些过期的数据。must-revalidata首部告诉缓存,如果要提供过期的数据给客户端,则必须向服务器验证数据的新鲜度,验证通过才可以使用过期的数据。缓存可以自由的向客户端提供新鲜的数据

  Cache-Control:max-age 该首部表示从服务器将数据传输过来的时间点起,可以认为该数据新鲜的秒数。服务器可以将max-age设置为0,从而让每次访问时缓存都进行刷新。

    Cache-Control:max-age=0

  Expires:{date} 该首部直接设置缓存的过期日期。由于很多服务器的时钟都不同步,使用绝对的时间点设置过期时间可能出现问题。

          客户端控制缓存新鲜度

  浏览器都有刷新或者重载按钮,可以强制浏览器或者代理缓存对可能过期的内容进行刷新。刷新按钮会在请求header中加入Cache-Control首部,这个请求会强制进行再验证,或者直接从原始服务器获取资源。刷新的确切行为会依浏览器类型而不同。

客户端Cache-Control请求指令
Cache-Control:max-stable={s} 缓存可以随意提供过期的数据,如果指定了{s},则告知缓存在{s}这个时间段内,数据不能过期。
Cache-Control:mini-fresh={s} 至少在未来{s}秒内,缓存提供的数据必须是新鲜的。
Cache-Control:max-age={s} 缓存不可以返回缓存时间超过{s}秒的数据。
Cache-Control:no-cache 客户端只接受进行过新鲜度再验证的缓存数据或者直接从服务器返回的数据。
Cache-Control:no-store 缓存应该删除所有客户端相关的缓存数据。
Cache-Control:only-if-cached 只有缓存中有数据副本,客户端才会获取一份副本。

    

         HTML中的HTTP-EQUIV

  为了让方便在网站项目中控制缓存,HTML提供了<META HTTP-EQUIV>标签,这个标签可以设置与文档有关的header。

  

 <HTML>
<HEAD>
<TITLE>TEST</TITLE>
<META HTTP-EQUIV="Cache-control" CONTENT="no-cache">
</HEAD>
......

  该标签可以在请求中插入一个首部字段,首部名称由属性HTTP-EQUIV 设置,首部内容由CONTENT设置。

  这个标签让我们可以让我们在页面中方便的设置响应首部,但是由于解析这个元素会给服务器增加额外的负担,所以只有很少web服务器和代理支持这个特性。因此,不建议通过设置这个标签来控制缓存,正确的配置header中的字段才是可靠的缓存控制方法。

  

  

关于缓存的tips——HTTP权威指南读书心得(十三)的更多相关文章

  1. [原创]Java性能优化权威指南读书思维导图

    [原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John 译者: 柳飞 ...

  2. [原创]Java性能优化权威指南读书思维导图4

    [原创]Java性能优化权威指南读书思维导图4

  3. [原创]Java性能优化权威指南读书思维导图3

    [原创]Java性能优化权威指南读书思维导图3

  4. [原创]Java性能优化权威指南读书思维导图2

    [原创]Java性能优化权威指南读书思维导图2

  5. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  6. [置顶] PHP开发实战权威指南-读书总结

    从今年开始,断断续续学习PHP已经有4个月了. 最初,认真学习PHP几天,就弄WordPress搭建了一个个人博客,这也符合技术人的实践理念. 最近,重温PHP开发实战权威指南,做点总结,整理下自己学 ...

  7. 经典的性能优化最佳实践 web性能权威指南 读书笔记

    web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...

  8. PHP开发实战权威指南-读书总结

    从今年开始,断断续续学习PHP已经有4个月了.最初,认真学习PHP几天,就弄WordPress搭建了一个个人博客,这也符合技术人的实践理念. 最近,重温PHP开发实战权威指南,做点总结,整理下自己学习 ...

  9. Tomcat权威指南-读书摘要系列2

    2. 配置Tomcat 2.1. 重定向Web应用程序的目录 将工程文件与Tomcat分离 复制conf和webapps文件夹到分离目录: 配置CATALINA_BASE环境变量,值为分离目录: 2. ...

随机推荐

  1. 设计模式之 Factory Method 工厂方法

    看到的比较有意思的一篇描述工厂方法的文章. http://www.codeproject.com/Articles/492900/From-No-Factory-to-Factory-Method 总 ...

  2. Null Pointer --设计模式

    在Joshua Bloch很有名的一本书<Effective in java>中建议不要在代码中返回空的collection/map/array,就像下面的代码一样: public Lis ...

  3. jQuery弹出层_点击自身以外地方关闭弹出层

    <html> <style> .hide{display:none;} </style> <script type="text/javascript ...

  4. react组件什么周期记录,转的

    react 的核心除了虚拟DOM,我想还有一个很重要的就是生命周期函数,理解生命周期函数,对写出合理的commponet很有帮助.下面总结一下我对生命周期函数的一些理解已经在项目过程中遇到的一些问题. ...

  5. 【转】关于oracle with as用法

    原文链接:关于oracle with as用法 with as语法–针对一个别名with tmp as (select * from tb_name) –针对多个别名with   tmp as (se ...

  6. php计算最后一次,第一次字符串出现位置

    strpos($str, n) 首次,n在str第一次出现位置, strrpos($str, n) 最后一次,n在str最后一次出现位置 strripos区分大小写

  7. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  8. thinkphp给图片打水印不清晰

    项目中打印条形码的函数,从thinkphp自带的water函数修改而来的. 贴上代码: /** * water2 * 改写thinkphp的water函数更强健的函数,增加了写入位置参数 去掉了alp ...

  9. XSS与字符编码的那些事儿

    目录 0x00:基本介绍 0x01:html实体编码 0x02:新增的实体编码 实体编码变异以及浏览器的某些工作原理! 0x03:javascript编码 0x04:base64编码 0x05:闲扯 ...

  10. eclipse中配置c++开发环境 Eclipse + CDT + MinGW

    转自eclipse中配置c++开发环境 Eclipse + CDT + MinGW 基本框架:Eclipse + CDT + MinGW 背景知识: CDT:CDT 是完全用 Java 实现的开放源码 ...