一個最簡單的支持大部分主流瀏覽器的 headers
集如下:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
-
Cache-Control
作用于HTTP1.1
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個常用的參數(shù):
no-cache
,瀏覽器和緩存服務器都不應該緩存頁面信息窒所;public
,瀏覽器和緩存服務器都可以緩存頁面信息迹栓;no-store
,請求和響應的信息都不應該被存儲在對方的磁盤系統(tǒng)中俭缓;must-revalidate
克伊,對于客戶機的每次請求,代理服務器必須想服務器驗證緩存是否過時
-
Pragma
作用于HTTP 1.0
HTTP1.0
中通過Pragma
控制頁面緩存华坦,通常設置的值為no- cache
愿吹,不過這個值不這么保險,通常還加上Expires
置為0
來達到目的惜姐。但是如我們刻意需要瀏覽器或緩存服務器緩存住我們的頁面這個值則要設置為Pragma
犁跪。
-
Expires
作用于proxies
表示存在時間,允許客戶端在這個時間之前不去檢查(發(fā)請求)歹袁,等同
max-age
的 效果坷衍。但是如果同時存在,則被Cache-Control
的max-age
覆蓋条舔。 格式:Expires
:時間枫耳,后面跟一個時間或者日期,超過這個時間后緩存失效孟抗。也就是瀏覽器發(fā)出請求之前迁杨,會檢查這個時間是否失效钻心,若失效,則瀏覽器會重新發(fā)出請求仑最。
HTML
通過添加 <meta>
標簽來禁止瀏覽器緩存(代碼必須包含在 <head>
標簽中)
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
其他環(huán)境的設置
- .htaccess (Apache)
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
- Java Servlet
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
- PHP
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
- ASP
Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate"
Response.addHeader "Pragma", "no-cache"
Response.addHeader "Expires", "0"
- ASP.NET
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");
- Ruby on Rails
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'
- Python on Flask
resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"
- Google Go
responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
responseWriter.Header().Set("Pragma", "no-cache")
responseWriter.Header().Set("Expires", "0")
Resources
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
后記
上述方案對于 Safari
并無鳥用扔役,一種比較正規(guī)的方案是:
$(window).bind("pageshow", function (event) {
if (event.originalEvent.persisted) {
window.location.reload();
}
});