對於普通的靜態文件,html、css、js和圖片文件而言,是希望瀏覽器進行緩存,以便再次訪問時直接從瀏覽器獲取,減少請求。
對於其它的js請求而言,如果被瀏覽器緩存了,而不能實時獲取到最新的數據是讓人抓狂的事情。
IE瀏覽器(使用IE核的360瀏覽器、搜狗瀏覽器等在IE模式下)就有這樣一個設定:對於響應頭(Response Header)中,沒有明確表明是否緩存(強制緩存或者強制不緩存),IE瀏覽器默認的設置是“自動 automatically”,即在不關閉瀏覽器的情況下(同一個會話),刷新頁面,對於相同url的請求並不會再次發送(即請求被緩存了)(微軟官方說法:http://windowsitpro.com/networking/caching-ie)
對於這個問題的解決方案從以下兩個角度進行了考慮:
1、從發送請求的瀏覽器端(客戶端)進行考慮
由於ie對於相同url進行了緩存,所以讓url每次都不同,則可以避免被緩存的問題,
對於使用jQuery庫ajax方法發送請求的來說,有這個參數可選cache:false,當不設置這個參數的時候,默認值爲true,即每次url都不變,而當設置爲false時,jQuery庫會在設置的url後,自動加一個名字爲“_”,值爲隨機數抑或是時間戳的一個參數
對於使用原生的js來說,也是一樣的道理,在url最後加上一個隨機數或者時間戳參數,來確保每一次發送的url都不一樣,請求就不會被緩存住了
2、從返回響應頭(Response Header)的服務器端進行考慮
因爲只是ie對於沒有明確表明是否緩存(強制緩存或者強制不緩存)造成的“自動 automatically”緩存的結果,那麼就在響應頭中明確加上不緩存的頭信息即可解決這個問題。
需要在響應頭(Response Header)增加的爲以下兩個(其中後一個針對低版本ie):
Cache-Control
no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma
no-cache
響應頭信息可以在服務器配置(apcache/nginx等),具體方法這裏不做介紹,樓主沒有此方面研究
推薦使用服務器端的方法來解決問題,對於沒法更改服務器響應頭的來說,那麼就只好用第一種方法將就一下了
參考資料:
https://segmentfault.com/q/1010000000204710
http://windowsitpro.com/networking/caching-ie
https://support.microsoft.com/zh-cn/kb/234067