关于HTML(JSP)页面的缓存设置 -- cache-control

时间:2023-01-07 07:33:33

我在项目中遇到这么一个问题,当用户登录了系统后,进入并copy下系统某个页面的link,然后关闭浏览器,重新打开浏览器,把刚才复制好的link paste到浏览器的地址栏去,直接enter,发现浏览器跳过了登录页面而直接进入刚才进入到的页面里了。
      这个问题,我一开始以为是我的URL sercurity 的问题,搞了很久,最后才发现是缓存的问题。
然后就在JSP页面做如下设置,就完美解决了这个问题。

在JSP页面头加上如下代码段:

<%  
response.setHeader( "Cache-Control", "no-cache,no-store");//HTTP 1.1
response.setDateHeader( "Expires", 0 ); //prevent caching at the proxy server
response.setHeader( "Pragma", "no-cache" );  //HTTP 1.0  
%>

在HTML的head标签里面加上如下代码段:

<meta http-equiv="Pragma" content="no-cache">  
<meta http-equiv="Cache-Control" content="no-cache">  
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">

如上设置即可使页面在每次访问时都必须向服务器发出请求。

下面是网上找到的关于HTML里缓存的cache-control的设置描述:
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
1) 打开新窗口 值为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 比如:禁止页面在IE中缓存 http响应消息头部设置: CacheControl = no-cache Pragma=no-cache Expires = -1 Expires是个好东东,如果服务器上的网页经常变化,就把它设置为-1,表示立即过期。