HTTP消息头中的“Cache-control”介绍


1. response.setHeader("Cache-Control","no-cache");




This is used to prevent the browser from caching your dynamic content generated by a JSP or Servlet.


You set this attribute in the HTTP header of the response object which would tell the browser not to cache this content. So everytime you request the page again, the browser would make a new request, instead of showing you a cached page.


2.使用服务器端控制AJAX页面缓存:
    response.setHeader( "Pragma", "no-cache" );
    response.addHeader( "Cache-Control", "must-revalidate" );
    response.addHeader( "Cache-Control", "no-cache" );
    response.addHeader( "Cache-Control", "no-store" );
    response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。


3.Cache-Control头域
  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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
综述:
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。网页的缓存通过HTTP消息头中的“Cache-control”来控制,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。
 
其作用根据不同的重新浏览方式分为以下几种情况:
(1)打开新窗口如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如: Cache-control: max-age=5 表示当访问此网页后的5秒内再次访问不会去服务器。
(2)在地址栏回车如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
(3)按后退按扭如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问。
(4) 按刷新按扭无论为何值,都会重复访问当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问: Expires: Fri, 31 Dec 1999 16:00:00 GMT 在ASP中,可以通过Response对象的Expires、ExpiresAbsolute属性控制Expires值;通过Response对象的CacheControl属性控制Cache-control的值,例如: Response.ExpiresAbsolute = #2000-1-1# ' 指定绝对的过期时间,这个时间用的是服务器当地时间,会被自动转换为GMT时间 Response.Expires = 20 ' 指定相对的过期时间,以分钟为单位,表示从当前时间起过多少分钟过期。 Response.CacheControl = "no-cache" Expires值是可以通过在Internet临时文件夹中查看临时文件的属性看到的。
 
 
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control","private");
使用Java提供的方法防止IE缓存JSP文件  /清除response缓存的方法
Java代码
HttpServletResponse response = runData.getResponse();   
        response.setHeader("Pragma","No-cache");    
        response.setHeader("Cache-Control","no-cache");    
        response.setDateHeader("Expires", 0);   
  1, 使用java提供的方法,在jsp或者servlet中都可以
  <%
  response.setHeader("Pragma","No-cache");
  response.setHeader("Cache-Control","no-cache");
  response.setDateHeader("Expires", 0);
  %>
在jsp页里
<%response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.flushBuffer();%>


二、清除cookie
<%  
          Cookie   killMyCookie   =   new   Cookie("mycookie",   null);  
          killMyCookie.setMaxAge(0);  
          killMyCookie.setPath("/");  
          response.addCookie(killMyCookie);  
%>
三、清除session
清除session方法
<%@   page   language="java"   %>  
<%  
  session.invalidate();  
%>  

在页面关闭时清除session,需要捕获windows.onclose事件,再调用清除session方法



nginx 中的 add_header Cache-Control no-store;


通常,IE浏览器访问页面时,会在临时文件夹下保存页面的html,js,图片等等。
当页面上包含敏感信息时,这些信息也会存储在临时文件中。
这就造成了安全隐患

用户可以设置浏览器在关闭浏览器时删除临时文件,或手工删除。
但从网站开发者的角度讲,无法要求用户这样做。那么,如何满足这样的需求呢?
能不能控制浏览器不保存临时文件呢?

可以,HTTP协议1.1版中,规定了缓存的使用。其中,
Cache-Control: no-store
这个应答头可以满足我们的需要。

从协议中摘抄的部分内容:
no-store指令的用途是阻止不经意间释放或保存敏感信息(例如,在备份磁带上)。
no-store指令应用到整个消息,且[可以]在响应或请求中发送。
若在请求中发送,缓存[禁止]保存该请求或任何对其响应的任何部分。
若在响应中发送,缓存[禁止]保存该响应或引起的请求的任何部分。
该指令应用到非共享和共享缓存。
"[禁止]保存"在本处意味着缓存[禁止]在内部保存信息到固定存储器上,
且[必须]在转发后尽可能迅速且最有效地尝试从非固定存储器上删除该信息。

该指令的用途是满足关心通过非可预料地访问缓存数据结构意外释放信息的确定用户和服务作者的规定要求。
使用该指令可能在一些情况下改进私密性的同时,我们提醒它"并非"在任何方式下都是可靠或充分的机制来确保私密性。
特别是,恶意或妥协缓存可能不认识或服从该指令,且通过网络可能易受偷听。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值