请问header( "cache-control: no-store, no-cache, must-revalidate" );中
既然已经设置cache-control: no-cache 了,为何多数网站还会添加no-store,must-revalidate 呢?有什么用处?
另外,no-store 和 no-cache 以及 must-revalidate 实质上有什么区别?最好能列举实例,谢谢

解决方案 »

  1.   

      Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
      Public指示响应可被任何缓存区缓存。
      Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
      no-cache指示请求或响应消息不能缓存
      no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
      max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
      min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
      max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
      

  2.   

      学习记得有一次有个开发发布了一段代码,当晚整个站点就挂掉了....原因就是遗漏了no-cache,然后...然后这个开发就没有然后了....
      

  3.   

    客户端从服务器请求数据经历如下基本步骤: 
      1、如果请求命中本地缓存则从本地缓存中获取一个对应资源的"copy"; 
      2、检查这个"copy"是否fresh,是则直接返回,否则继续向服务器转发请求。 
      3、服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。 
      4、客户端更新本地缓存。 
      no-cache的作用是:强制客户端跳过步骤2,直接向服务器发送请求。也就是说每次请求都必须向服务器发送。 
      must-revalidate:作用与no-cache相同,但更严格,强制意味更明显。但这只是理论上的描述,根据我在ff6上的测试,它几乎不起作用:只要请求的频率加快到一定程度,服务器就接收不到请求。 
      no-store:缓存将不存储response,包括header和body。测试结果表明,除每次请求都必发送到服务器外,响应代码均是200,且request并没有发送"If-Modified-Since"和"If-None-Match"头,这意味着缓存的确没有存储response。 
      以上三者都是要求客户端每次请求都必须到服务器进行revalidate,此功能还可以通过max-age实现: 
     
    Java代码  
    Cache-Control:max-age=0  
    测试结果证明了这一点,每次都请求了服务器,且状态码是304。 
     
    Java代码  
    <META HTTP-EQUIV="Cache-control" CONTENT="no-cache">  这种设置方式大部分服务器不支持,额外的解析成本、只支持html文件等原因造成的结果是,它基本上是无效的。
      

  4.   

    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
      Public指示响应可被任何缓存区缓存。
      Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
      no-cache指示请求或响应消息不能缓存
      no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
      max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
      min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
      max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
      

  5.   

    嗯,当时我没有经手,听同事说主要是no-cache导致浏览器和CDN缓存异常,造成源站集群压力极大,然后站点被迫临时关闭...对于商业公司,关闭站点嘛意味着有人要有麻烦喽....