在工作中,經常在jsp頁面中看到下面類似的一段代碼:
response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 response.addHeader("Cache-Control", "no-store"); //Firefox response.setHeader("Pragma", "no-cache"); //HTTP 1.0 response.setDateHeader("Expires", -1); response.setDateHeader("max-age", 0);
那麼這段代碼的意思是什麼呢?作用又是什麼呢?且看下面的解釋:
代碼的前三行的功能都是一樣的,只是為了相容多瀏覽器而做的處理,都是用來阻止瀏覽器緩衝由jsp或者servlet動態產生的內容。下面是英文原文的解釋:
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.
使用伺服器端控制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訊息的值,那麼客戶機可以接收超出逾時期指定值之內的響應訊息。
response.setDateHeader("Expires", 0);
expires是response的一個屬性
它可以設定頁面在瀏覽器的緩衝裡儲存的時間
超過設定的時間後就到期
到期後再次瀏覽該頁面就需要重新請求伺服器發送頁面資料
如果在規定的時間內再次訪問次頁面
就不需從伺服器傳送 直接從緩衝中讀取