防止網頁被客戶端IE緩存 (該網頁轉載至http://www.cnblogs.com/eflylab/archive/2009/03/19/1416372.html)
很多開發人員在維護公司運營的網站項目時,可能經常會遇見一個問題就是,編輯人員又抱怨,首頁生成了靜態頁面,為何我訪問內容依然是舊的!也許這時你會向她們解釋,這是由於IE為加快訪問WEB的速度,緩存了你之前瀏覽的頁面.此時其他人訪問應該是新的內容.但人們總是只相信自己的眼睛,相信自己所看到的,所以她們會認為別人訪問時也是舊的內容!
對於這樣的問題開發人員就要想辦法防止瀏覽器緩存頁面,這里提供幾種解決方案!
解決緩存的原理:get請求地址不一樣,瀏覽器就不會取緩存,而是向服務器端發送請求
1.用戶訪問頁面時,隨機的生成一個串當參數加在URL后,這樣每次URL不同,瀏覽器會重新到服務器請求加載.但此方法顯然不友好,如果是公司的首頁.沒有誰會願意在域名后還看加一長串的字符! 這種方法適合列表頁中顯示圖片的路徑,在圖片的路徑后加"?+new Random().next()",這樣上傳圖片后,就可以實時的顯示新的圖片。
2.將首頁設置一個動態頁面refreshIndex.aspx.此頁面的加載事件PageLoad中定入以下代碼
Server.Transfer(
"
首頁靜態頁面路徑
"
);
這樣其實就不是靜態頁面了,但他又比動態頁面稍好.因為不用頻繁的訪問數據庫!在稍微犧牲一點性能的前提下,可以解決方案一的不友好性.
3.利用HTML元數據META,在HTML頭設置如下屬性
<
META
HTTP-EQUIV
="Pragma"
CONTENT
="no-cache"
>
<
META
HTTP-EQUIV
="Cache-Control"
CONTENT
="no-cache"
>
<
META
HTTP-EQUIV
="Expires"
CONTENT
="0"
>
告訴瀏覽器不要緩存本頁面,但這種方法並不是總有效,且只支持IE5及以上版本.為更好的解決緩存問題,還需要在HTML文檔結尾處添加
<
HEAD
>
<
META
HTTP-EQUIV
="PRAGMA"
CONTENT
="NO-CACHE"
>
</
HEAD
>
具體原因可以參見
http://support.microsoft.com/kb/222064 有時我們使用JS文件來存放數據,為了防止JS文件更新后用戶讀取的是緩存,可以這樣使用
<
script
language
="javascript"
type
="text/javascript"
>
//
防止客戶端緩存JS文件造成數據更新不及時
document.write(
"
<s
"
+
"
cript type='text/javascript' src='/CacheData/json/StockInfo.js?
"
+
new
Date()
+
"
'></scr
"
+
"
ipt>
"
);
</
script
>
或者
<!--
以下方法僅支持aspx頁面
-->
<
script
language
="javascript"
type
="text/javascript"
src
="/jslib/StockInfo.js?t=<%=DateTime.Now %>"
></
script
>