IE浏览器缓存第二次请求的解决方案
前兩天在做pc端頁面的時(shí)候,一個(gè)頁面在IE瀏覽器上進(jìn)行自測(cè)的時(shí)候,發(fā)現(xiàn)當(dāng)?shù)诙我约爸笳?qǐng)求的參數(shù)和第一次請(qǐng)求的參數(shù)一致的時(shí)候,返回的數(shù)據(jù)都是一樣的,在后臺(tái)服務(wù)器上也沒有看到請(qǐng)求日志,而是使用第一次請(qǐng)求回來的數(shù)據(jù)返回給你。那要怎么解決這個(gè)問題呢?
目前我想到4種解決方案:
1、緩存問題只是針對(duì)get請(qǐng)求,所以可以把get請(qǐng)求改為post請(qǐng)求
2、在請(qǐng)求的url地址中加入時(shí)間戳或者隨機(jī)數(shù)
加入時(shí)間戳或者隨機(jī)數(shù)之后,這樣每次請(qǐng)求的地址都不一樣。
3、在請(qǐng)求頭中設(shè)置Cache-Control: no-cache
XMLHttpRequest.setRequestHeader(‘"Cache-Control","no-cache"’)在后端響應(yīng)頭也要設(shè)置
header(“Cache-Control:no-cache,must-revalidate”);可以參考一下這篇文章:web性能優(yōu)化之:no-cache與must-revalidate深入探究
4、在請(qǐng)求頭中設(shè)置If-Modified-Since:0
HTTP的請(qǐng)求頭標(biāo)簽 If-Modified-Since與Last-Modified
1.基本定義
Last-Modified 與If-Modified-Since 都是標(biāo)準(zhǔn)的HTTP請(qǐng)求頭標(biāo)簽,用于記錄頁面的最后修改時(shí)間。
2.發(fā)送方向
Last-Modified 是由服務(wù)器發(fā)送給客戶端的HTTP請(qǐng)求頭標(biāo)簽
If-Modified-Since 則是由客戶端發(fā)送給服務(wù)器的HTTP請(qǐng)求頭標(biāo)簽
3.應(yīng)用場(chǎng)景
-
Last-Modified 在瀏覽器第一次請(qǐng)求某一個(gè)URL時(shí),服務(wù)器端的返回狀態(tài)會(huì)是200,內(nèi)容是你請(qǐng)求的資源,同時(shí)有一個(gè)Last-Modified的屬性標(biāo)記此文件在服務(wù)期端最后被修改的時(shí)間,格式類似這樣:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT 后面跟的時(shí)間是服務(wù)器存儲(chǔ)的文件修改時(shí)間 -
If-Modified-Since 客戶端第二次請(qǐng)求此URL時(shí),根據(jù) HTTP 協(xié)議的規(guī)定,瀏覽器會(huì)向服務(wù)器傳送 If-Modified-Since 報(bào)頭,詢問該時(shí)間之后文件是否有被修改過:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT 后面跟的時(shí)間是本地瀏覽器存儲(chǔ)的文件修改時(shí)間
如果服務(wù)器端的資源沒有變化,則時(shí)間一致,自動(dòng)返回HTTP狀態(tài)碼304(Not Changed.)狀態(tài)碼,內(nèi)容為空,客戶端接到之后,就直接把本地緩存文件顯示到瀏覽器中,這樣就節(jié)省了傳輸數(shù)據(jù)量。
如果服務(wù)器端資源發(fā)生改變或者重啟服務(wù)器時(shí),時(shí)間不一致,就返回HTTP狀態(tài)碼200和新的文件內(nèi)容,客戶端接到之后,會(huì)丟棄舊文件,把新文件緩存起來,并顯示到瀏覽器中。
以上操作可以保證不向客戶端重復(fù)發(fā)出資源,也保證當(dāng)服務(wù)器有變化時(shí),客戶端能夠得到最新的資源。
關(guān)于If-Modified-Since與Last-Modified可以參考這篇文章鏈接地址
總結(jié)
以上是生活随笔為你收集整理的IE浏览器缓存第二次请求的解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人认为最low的10款鞋子
- 下一篇: 前端获取当前服务器时间,不使用客户端电脑