【IE Cache】IE瀏覽器造成的請求Cache問題 的解決方案

對於普通的靜態文件,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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章