2019-10-17 seo達人
一、緩存簡介
緩存無處不在,瀏覽器端的緩存、服務(wù)器端的緩存、代理服務(wù)器的緩存、對象緩存、數(shù)據(jù)庫也有緩存……HTTP中具有緩存功能的是瀏覽器緩存和代理服務(wù)器緩存。下面說一下緩存的優(yōu)點:
1.減少冗余的數(shù)據(jù)傳輸,節(jié)省了傳輸時間
2.減少服務(wù)器的負擔(dān),大大提高了網(wǎng)站的性能
3.加快了客戶端加載網(wǎng)頁的速度
二、使用Fiddler如何查看緩存的Header
與緩存相關(guān)的內(nèi)容放在Header中的Cache項里;Requests和Responses均是這樣。如圖:
三、緩存的新鮮度(通過什么方式判斷其是否,如何刷新緩存)
Web服務(wù)器通過兩種方式判斷瀏覽器緩存是否:
(1)瀏覽器把緩存文件的最后修改時間通過Header“If-Modified-Since”項傳遞給Web服務(wù)器。
(2)瀏覽器把緩存文件的ETag通過Header“If-None-Match”項傳遞給Web服務(wù)器。
簡單描述一下,瀏覽器端想請求一個文檔,它首先檢查本地緩存,發(fā)現(xiàn)存在這個文檔的緩存,獲取緩存文檔的最后修改時間,發(fā)送請求,將值放在Header中的“If-Modified-Since”項傳遞給Web服務(wù)器。Web服務(wù)器接收到請求后,將服務(wù)器的文檔修改時間(Last-Modified)與HTTP請求中的header中的“If-Modified-Since”值相比較,有兩種情況,如下面圖示:
1.緩存有效:
2.緩存無效:
截圖舉例:
上面說的是If-Modified-Since值對比的方式;下面說一下ETa'g;
四、ETag
ETag(Entity Tag):實體標(biāo)簽;是根據(jù)實體內(nèi)容生成的一段hash字符串(類似MD5之后的結(jié)果),可以用來標(biāo)識資源的狀態(tài)(當(dāng)資源發(fā)送變化時,ETag也會跟著改變);ETag是Web服務(wù)端產(chǎn)生的,然后通過response響應(yīng)給瀏覽器。使用ETag,主要解決Last-Modified無法解決的情況:
(1.某些服務(wù)器不能得到文件的If-Modified-Since來判斷文件是否更新;
(2.某些文件修改非常頻繁,以小于秒的單元進行修改,而Last-Modified最單元為秒;
(3.有些文件最后修改時間變化了,但是內(nèi)容并沒有變化,所以我們不希望瀏覽器以為文件已變化了;
五、與緩存相關(guān)的header
字段名稱 釋義
Cache-Control:max-age=0 以秒為單位
If-Modified-Since:Fri, 11 Jan 2019 01:55:04 GMT 緩存文件的最后修改時間
If-None-Match:W/"5c37f778-732" 緩存文件的Etag的值
Cache-Control:no-cache 不使用緩存
Pragma:no-cache 不使用緩存
Cache-Control:public 響應(yīng)被緩存,可以共享與多用戶
Cache-Control:private 響應(yīng)只能私有緩存,不可共享
Cache-Control:no-store 絕對禁止緩存(機密、敏感文件)
Cache-Control:max-age=60 60秒后緩存過期(相對時間)
Date:Fri, 11 Jan 2019 01:55:04 GMT 當(dāng)前發(fā)送時間
Expires:Fri, 11 Jan 2019 01:55:04 GMT 緩存過期時間設(shè)置(絕對時間)
Last-Modified:Fri, 11 Jan 2019 01:55:04 GMT 服務(wù)器端文件的最后修改時間
Etag:W/"5c37f778-732" 服務(wù)器端文件的Etag值
六、關(guān)于緩存的常識
1.如何讓瀏覽器不使用緩存?
答:【Ctrl+F5】快捷鍵強制刷新瀏覽器,讓瀏覽器不使用緩存;此時Fiddler抓包所看到的請求Header中都會帶有Cache-Control:no-cache;
2.如何讓瀏覽器直接使用緩存,不請求服務(wù)器進行緩存驗證?
答:第一次訪問與第二次訪問同一個網(wǎng)頁;(注意:第二次訪問時,輸入網(wǎng)址,直接回車)瀏覽器會直接使用有效的緩存,而不會發(fā)生HTTP請求去服務(wù)器驗證緩存,這種情況稱之為緩存命中;
使用Fiddler抓包,現(xiàn)象:第一次訪問,有70多個Session;第二次訪問,僅40多個請求;
3.瀏覽器均可在設(shè)置中設(shè)置不使用緩存;
4.公有緩存、私有緩存的區(qū)別:一個可以多個不同的客戶端使用,一個只可唯一的客戶端使用;
藍藍設(shè)計( m.820esy.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)。
藍藍設(shè)計的小編 http://m.820esy.cn