介绍

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!所以说他具有很大的风险性,实现这个规范的服务器少之又少!

最新文章

  1. [ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
  2. CSS 文字两端对齐
  3. [js开源组件开发]图片放大镜
  4. HFSS学习(一)计划
  5. Python脚本控制的WebDriver 常用操作 <十一> 操作测试对象
  6. JDK,JRE,JVM区别与联系-理解与概括
  7. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
  8. PAT 1075. PAT Judge (25)
  9. 如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断。
  10. $('#checkbox').attr('checked'); 回报checked或undefined该解决方案
  11. C——联合体(共同体)总结
  12. 解决Centos 7 下 tomcat字体异常 Font '宋体' is not available to the JVM
  13. 【iOS】UIViewController基类的实现
  14. 06-Nodejs介绍
  15. Mysql 数据库操作之DDL、DML、DQL语句操作
  16. Jquery 组 checkbox双向控制与tr变色
  17. sublime3添加python编译系统
  18. 吴裕雄 python神经网络 花朵图片识别(10)
  19. 字符串前面加u、r、b的含义
  20. JavaScript 之 最佳位置选择

热门文章

  1. ubuntu+vm+ftp
  2. [Python] 弗洛伊德(Floyd)算法求图的直径并记录路径
  3. linux 安装mysql服务
  4. 解析远程域名主机的IP地址
  5. linux命令:mv命令
  6. hdu 4737 A Bit Fun 尺取法
  7. Python之flask总结
  8. 03_01_基本操作_增(insert)
  9. Android中字体颜色的设置
  10. Pdf 解密后复制文字乱码