上一章介绍了缓存新鲜度判断的基本原理,本章对于缓存新鲜度判断方法进行一些补充(更新间隔略长略长。。)。web
服务器能够经过http定义的几种header对能够缓存数据的存在时间进行控制,按照其优先级由高到低分别为:浏览器
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=0spa
Expires:{date} 该首部直接设置缓存的过时日期。因为不少服务器的时钟都不一样步,使用绝对的时间点设置过时时间可能出现问题。代理
浏览器都有刷新或者重载按钮,能够强制浏览器或者代理缓存对可能过时的内容进行刷新。刷新按钮会在请求header中加入Cache-Control首部,这个请求会强制进行再验证,或者直接从原始服务器获取资源。刷新的确切行为会依浏览器类型而不一样。code
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提供了<META HTTP-EQUIV>标签,这个标签能够设置与文档有关的header。blog
1 <HTML> 2 <HEAD> 3 <TITLE>TEST</TITLE> 4 <META HTTP-EQUIV="Cache-control" CONTENT="no-cache"> 5 </HEAD> 6 ......
该标签能够在请求中插入一个首部字段,首部名称由属性HTTP-EQUIV 设置,首部内容由CONTENT设置。
这个标签让咱们可让咱们在页面中方便的设置响应首部,可是因为解析这个元素会给服务器增长额外的负担,因此只有不多web服务器和代理支持这个特性。所以,不建议经过设置这个标签来控制缓存,正确的配置header中的字段才是可靠的缓存控制方法。