1. 程式人生 > >JSP禁用緩存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);

JSP禁用緩存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);

閱讀 right ati date ref ima post pub copy


標簽: jsp 技術分享 分類:

JSP禁用緩存的方式
使用服務器端控制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")無效。

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消息的值,那麽客戶機可以接收超出超時期指定值之內的響應消息。


禁用IE緩存

HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

普通報頭中的Cache-Control用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制),HTTP1.0使用的類似的報頭域為Pragma。
請求時的緩存指令包括: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、s-maxage。

例:為了指示IE瀏覽器(客戶端)不要緩存頁面,服務器端的jsp程序可以編寫如下:
response.setHeader(“Cache-Control”, “no-cache”);
//response.setHeader(“Pragma”, “no-cache”);作用相當於上行代碼,通常兩者合用

Expires實體報頭域給出響應過期的日期和時間。為了讓代理服務器或瀏覽器在一段時間以後更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中加載,縮短響應時間和降低服務器負載)的頁面,我們可以使用Expires實體報頭域指定頁面過期時間。例:Expires:Thu,15 Sep 2006 16:23:12 GMT
HTTP1.1的客戶端和緩存必須將其他非法的日期格式(包括0)看作已經過期。如:為了讓瀏覽器不要緩存頁面,也可以利用Expires實體報關域,設置為0,jsp程序如下:
response.setDateHeader(“Expires”, “0”);

JSP禁用緩存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);