Cache-Control头

介绍

Cache-Control头在HTTP中有必定的难度,第一它既能够用于请求头,也能够用于响应头(这里主要将响应缓存)。第二,它控制着两个缓存,本地缓存:指客户端本地及其中的缓存(大多指浏览器缓存),可是它彻底不受控制,一般浏览器会本身决定是否把某些内容放到缓存中,同时用户也能够本身处理缓存(清空)。共享缓存,处于客户端和服务器之间的缓存。既CDN。开发者能够绝对的控制。数据库

代码示例

1. Cache-Control: public max-age=3600
2. Cache-Control: private immutable
3. Cache-Control: no-cache
4. Cache-Control: public max-age=3600 s-maxage=7200
5. Cache-Control: public max-age=3600 proxy-revalidate

属性

首先,Cache-Control有三种属性:缓冲能力、过时时间和二次验证。浏览器

缓冲能力
  • private:表示它只应该存在本地缓存;
  • public:表示它既能够存在共享缓存,也能够被存在本地缓存;
  • no-cache:表示不管是本地缓存仍是共享缓存,在使用它之前必须用缓存里的值来从新验证(并非表示不能使用缓存)。
  • no-store:表示不容许被缓存缓存

    过时时间
  • max-age= :设置缓存时间,设置单位为秒。本地缓存和共享缓存均可以。
  • s-maxage= :覆盖max-age属性。只在共享缓存中起做用。 安全

    二次验证(表示精细控制)
  • immutable:表示文档是不能修改的
  • must-revalidate:表示客户端(浏览器)必须检查代理服务商是否存在,即便它已经本地缓存了也要检查
  • proxy-revalidata:表示共享缓存(CDN)必需要检查源是否存在,即便已经存在了缓存。服务器

对示例代码的解释
  1. 本地缓存和CDN均缓存一小时
  2. 不能缓存在CDN,只能缓存在本地。而且一旦缓存了,则不能呗更新;
  3. 不能缓存,若是必定要缓存的话,确保对其进行二次验证;
  4. 本地缓存一小时,CDN上缓存2小时;
  5. 本地和CDN均被缓存一小时,可是若是CDN收到请求,则尽管已经缓存了一小时,仍是要检查源中文档是否已经被改变。
关于请求头中的Cache-Control

cache-Control不是响应头独有的,在有些请求头中会带有Cache-Control,可是咱们为何不多在请求头中见到这个呢?(也不多见到这方面的资料)缘由就是:他很是的危险!代理

咱们知道,HTTP中的PUT方法是具备很大的风险性的,由于它有可能使服务端的资源被不安全的客户端修改,请求中的Cache-Control也是同样,来跟我仔细思考:前面说到CDN是为了加快访问同时减轻服务器的压力,甚至是保护底层的数据库,那么试想,若是客户端利用Cache-Control强行的关闭掉CDN直接把请求发送到服务器上,此时攻击者就可与击穿CDN!因此说他具备很大的风险性,实现这个规范的服务器少之又少!code

相关文章
相关标签/搜索