前兩天在做pc端頁面的時候,乙個頁面在ie瀏覽器上進行自測的時候,發現當第二次以及之後請求的引數和第一次請求的引數一致的時候,返回的資料都是一樣的,在後台伺服器上也沒有看到請求日誌,而是使用第一次請求回來的資料返回給你。那要怎麼解決這個問題呢?
目前我想到4種解決方案:
1、快取問題只是針對get請求,所以可以把get請求改為post請求
2、在請求的url位址中加入時間戳或者隨機數
加入時間戳或者隨機數之後,這樣每次請求的位址都不一樣。
let url = url +
'&time='
+new
date()
.gettime()
;或者let url = url +
'&number='
+ math.
random()
;api.
get(url)
3、在請求頭中設定cache-control: no-cache
,"no-cache"』)在後端響應頭也要設定
header
(「cache-control:no-cache,must-revalidate」)
;
可以參考一下這篇文章:web效能優化之:no-cache與must-revalidate深入**
4、在請求頭中設定if-modified-since:0
)http的請求頭標籤 if-modified-since與last-modified
1.基本定義
last-modified 與if-modified-since 都是標準的http請求頭標籤,用於記錄頁面的最後修改時間。
2.傳送方向
last-modified 是由伺服器傳送給客戶端的http請求頭標籤
if-modified-since 則是由客戶端傳送給伺服器的http請求頭標籤
3.應用場景
如果伺服器端的資源沒有變化,則時間一致,自動返回http狀態碼304(not changed.)狀態碼,內容為空,客戶端接到之後,就直接把本地快取檔案顯示到瀏覽器中,這樣就節省了傳輸資料量。
如果伺服器端資源發生改變或者重啟伺服器時,時間不一致,就返回http狀態碼200和新的檔案內容,客戶端接到之後,會丟棄舊檔案,把新檔案快取起來,並顯示到瀏覽器中。
以上操作可以保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。
關於if-modified-since與last-modified可以參考這篇文章鏈結位址
瀏覽器學習筆記 04 第二次開啟瀏覽器快
瀏覽器中的 http 請求從發起到結束一共經歷了如下八個階段 構建請求 查詢快取 準備 ip 和埠 等待 tcp 佇列 建立 tcp 連線 發起 http 請求 伺服器處理請求 伺服器返回請求和斷開連線。dns快取,在瀏覽器本地把對應的 ip 和網域名稱關聯起來 資源快取 當伺服器返回 http 響...
唯獨ie瀏覽器快取ajax請求
用fiddler除錯http請求,在ie瀏覽器下,如果請求命中快取,fiddler不會包含該請求。但是在chrome下會包含快取的請求,result顯示為304。ie瀏覽器還會快取通過ajax請求的資料,導致後續ajax的請求資料不能更新。實際上是只快取get方式的請求,post方法因為每次的資料不...
IE瀏覽器 get請求快取問題
場景 比較簡單是使用的springmvc框架,在做資源國際化的時候,遇到了這個問題。具體做的操作是在頁面上點選切換語言的時候,需要發起請求在controller中切換locale。問題 1.開始的時候使用jquery的 get 方法,在chrome上沒有問題可以正常的發起請求 2.然後在ie中測試的...