摘要:緩存機(jī)制緩存機(jī)制主要由以下三部分組成緩存存儲(chǔ)策略這個(gè)策略的作用只有一個(gè),用于決定響應(yīng)內(nèi)容是否可緩存到客戶端。如果判斷標(biāo)識(shí)無效,則返回,用新數(shù)據(jù)替換客戶端緩存。表示文件在本地應(yīng)該緩存,且有效時(shí)長是秒從發(fā)出請(qǐng)求算起。
HTTP緩存機(jī)制
HTTP緩存機(jī)制主要由以下三部分組成
緩存存儲(chǔ)策略這個(gè)策略的作用只有一個(gè),用于決定 Http 響應(yīng)內(nèi)容是否可緩存到客戶端。主要通過Cache-Control來控制。
Cache-Control
max-age
public
private
no-cache
no-store
除了no-store其他都會(huì)被緩存到客戶端。
緩存過期策略這個(gè)策略的作用也只有一個(gè),那就是決定客戶端是否可直接從本地緩存數(shù)據(jù)中加載數(shù)據(jù)并展示(否則就發(fā)請(qǐng)求到服務(wù)端獲取)
數(shù)據(jù)緩存到了本地后還需要經(jīng)過判斷才能使用,那么瀏覽器通過什么條件來判斷呢? 答案是:Expires,Expires 指名了緩存數(shù)據(jù)有效的絕對(duì)時(shí)間,告訴客戶端到了這個(gè)時(shí)間點(diǎn)(比照客戶端時(shí)間點(diǎn))后本地緩存就作廢了,在這個(gè)時(shí)間點(diǎn)內(nèi)客戶端可以認(rèn)為緩存數(shù)據(jù)有效,可直接從緩存中加載展示。
緩存對(duì)比策略將緩存在客戶端的數(shù)據(jù)標(biāo)識(shí)發(fā)往服務(wù)端,服務(wù)端通過標(biāo)識(shí)來判斷客戶端 緩存數(shù)據(jù)是否仍有效,進(jìn)而決定是否要重發(fā)數(shù)據(jù)。
客戶端檢測到數(shù)據(jù)過期或?yàn)g覽器刷新后,往往會(huì)重新發(fā)起一個(gè) http 請(qǐng)求到服務(wù)器,服務(wù)器此時(shí)并不急于返回?cái)?shù)據(jù),而是看請(qǐng)求頭有沒有帶標(biāo)識(shí)( If-Modified-Since、If-None-Match)過來,如果判斷標(biāo)識(shí)仍然有效,則返回304告訴客戶端取本地緩存數(shù)據(jù)來用即可(這里要注意的是你必須要在首次響應(yīng)時(shí)輸出相應(yīng)的頭信息(Last-Modified、ETags)到客戶端)。如果判斷標(biāo)識(shí)無效,則返回200,用新數(shù)據(jù)替換客戶端緩存。
ETags, If-None-MatchEtag是指根據(jù)實(shí)體內(nèi)容生成一段hash字符串,標(biāo)識(shí)資源的狀態(tài),由服務(wù)端產(chǎn)生。瀏覽器會(huì)將這串字符串傳回服務(wù)器,驗(yàn)證資源是否已經(jīng)修改
Last-Modified, If-Modified-Since這兩個(gè)是HTTP1.0中用來驗(yàn)證資源是否過期的請(qǐng)求/響應(yīng)頭,這兩個(gè)頭部都是日期,驗(yàn)證過程與Etag類似。
總結(jié)Http 緩存機(jī)制實(shí)際上是 Http 緩存策略三個(gè)要素(緯度)相互作用的集合,所以在分析和設(shè)置 Http 報(bào)文緩存頭時(shí),只要能從中精準(zhǔn)的分解出緩存三要素,我們就能非常準(zhǔn)確的預(yù)判到緩存設(shè)置最終能達(dá)到的效果。
實(shí)踐在html文件頭部加上如下標(biāo)簽,能使該文件每次去服務(wù)端做對(duì)比,若不同則返回新文件,若相同則取客戶端緩存。
或是在項(xiàng)目中添加NoCacheFilter.java文件,響應(yīng)頭添加相關(guān)屬性
HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("Cache-Control", "no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); resp.setHeader("Pragma", "no-cache");字段 HTTP1.0 緩存字段詳解
Pragma。 設(shè)置頁面是否緩存,為Pragma則緩存,no-cache則不緩存。
Expires。有了Pragma來禁用緩存,自然也需要有個(gè)東西來啟用緩存和定義緩存時(shí)間。如果Pragma頭部和Expires頭部同時(shí)存在,則起作用的會(huì)是Pragma。,響應(yīng)報(bào)文中Expires所定義的緩存時(shí)間是相對(duì)服務(wù)器上的時(shí)間而言的,其定義的是資源“失效時(shí)刻”,如果客戶端上的時(shí)間跟服務(wù)器上的時(shí)間不一致(特別是用戶修改了自己電腦的系統(tǒng)時(shí)間),那緩存時(shí)間可能就沒啥意義了。
HTTP1.1 緩存字段詳解Cache-Control: 定義緩存過期時(shí)間。若報(bào)文中同時(shí)出現(xiàn)了 Expires 和 Cache-Control,則以 Cache-Control 為準(zhǔn)。
(1)max-age=600。 表示文件在本地應(yīng)該緩存,且有效時(shí)長是600秒(從發(fā)出請(qǐng)求算起)。在接下來600秒內(nèi),如果有請(qǐng)求這個(gè)資源,瀏覽器不會(huì)發(fā)出 HTTP 請(qǐng)求,而是直接使用本地緩存的文件。
(2)no-cache。實(shí)際上她是會(huì)被緩存的,只不過每次在向客戶端(瀏覽器)提供響應(yīng)數(shù)據(jù)時(shí),==緩存都要向服務(wù)器評(píng)估緩存響應(yīng)的有效性==
(3)no-store
響應(yīng)不被緩存的意思。
Last-Modified / If-Modified-Since
(1)Last-Modified: 標(biāo)示這個(gè)響應(yīng)資源的最后修改時(shí)間。web服務(wù)器在響應(yīng)請(qǐng)求時(shí),告訴瀏覽器資源的最后修改時(shí)間。
(2)If-Modified-Since:
當(dāng)資源過期時(shí)(使用Cache-Control標(biāo)識(shí)的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務(wù)器請(qǐng)求時(shí)帶上頭 If-Modified-Since,表示請(qǐng)求時(shí)間。若服務(wù)端請(qǐng)求資源的最后修改時(shí)間較新,則響應(yīng)資源內(nèi)容(HTTP 200);若最后修改時(shí)間較舊,則響應(yīng)HTTP 304,告知瀏覽器繼續(xù)使用所保存的cache。
Etag/If-None-Match: Etag/If-None-Match也要配合Cache-Control使用。
(1)Etag: web服務(wù)器響應(yīng)請(qǐng)求時(shí),告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器覺得)
(2)If-None-Match: 當(dāng)資源過期時(shí)(使用Cache-Control標(biāo)識(shí)的max-age),發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務(wù)器請(qǐng)求時(shí)帶上頭If-None-Match (Etag的值)。服務(wù)器與被請(qǐng)求資源的相應(yīng)校驗(yàn)串進(jìn)行比對(duì),決定返回200或304。
既生Last-Modified何生Etag?
HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問題:
(1) Last-Modified標(biāo)注的最后修改只能精確到秒級(jí),如果某些文件在1秒鐘以內(nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間。
(2) 如果某些文件會(huì)被定期生成,當(dāng)有時(shí)內(nèi)容并沒有任何變化,但Last-Modified卻改變了,導(dǎo)致文件沒法使用緩存。
(3) 有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時(shí)間,或者與代理服務(wù)器時(shí)間不一致等情形。
Last-Modified與ETag是可以一起使用的,服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag,一致的情況下,才會(huì)繼續(xù)比對(duì)Last-Modified,最后才決定是否返回304。
小結(jié)(1)瀏覽器第一次請(qǐng)求
(2) 瀏覽器第二次請(qǐng)求
緩存的作用減少網(wǎng)絡(luò)帶寬消耗。
無論對(duì)于網(wǎng)站運(yùn)營者或者用戶,帶寬都代表著金錢,過多的帶寬消耗,只會(huì)便宜了網(wǎng)絡(luò)運(yùn)營商。當(dāng)Web緩存副本被使用時(shí),只會(huì)產(chǎn)生極小的網(wǎng)絡(luò)流量,可以有效的降低運(yùn)營成本。
降低服務(wù)器壓力
給網(wǎng)絡(luò)資源設(shè)定有效期之后,用戶可以重復(fù)使用本地的緩存,減少對(duì)源服務(wù)器的請(qǐng)求,間接降低服務(wù)器的壓力。同時(shí),搜索引擎的爬蟲機(jī)器人也能根據(jù)過期機(jī)制降低爬取的頻率,也能有- 效降低服務(wù)器的壓力。
減少網(wǎng)絡(luò)延遲,提升頁面渲染速度
帶寬對(duì)于個(gè)人網(wǎng)站運(yùn)營者來說是十分重要,緩存的使用能夠明顯加快頁面打開速度,達(dá)到更好的體驗(yàn)。
參考鏈接https://juejin.im/entry/59c8d...
https://segmentfault.com/a/11...
https://mp.weixin.qq.com/s/qO...
https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/61917.html
摘要:緩存緩存,也叫網(wǎng)關(guān)緩存反向代理緩存。瀏覽器先向網(wǎng)關(guān)發(fā)起請(qǐng)求,網(wǎng)關(guān)服務(wù)器后面對(duì)應(yīng)著一臺(tái)或多臺(tái)負(fù)載均衡源服務(wù)器,會(huì)根據(jù)它們的負(fù)載請(qǐng)求,動(dòng)態(tài)將請(qǐng)求轉(zhuǎn)發(fā)到合適的源服務(wù)器上。雖然這種架構(gòu)負(fù)載均衡源服務(wù)器之間的緩存沒法共享,但卻擁有更好的處擴(kuò)展性。 一、前言? 工作上遇到一個(gè)這樣的需求,一個(gè)H5頁面在APP端,如果勾選已讀狀態(tài),則下次打開該鏈接,會(huì)跳過此頁面。用到了HTML5 的本地存儲(chǔ) API ...
摘要:對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。那么瀏覽器緩存究竟是個(gè)什么樣的神奇玩意呢什么是瀏覽器緩存簡單來說,瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過的資源如頁面,圖片,,數(shù)據(jù)等拷貝一份副本儲(chǔ)存在瀏覽器中。 對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。一方面極大地提升了用戶體驗(yàn),而另一方面有時(shí)會(huì)因?yàn)樽x取了緩存而展示了錯(cuò)誤的東西,而在開發(fā)過程中千方百計(jì)地想把緩存禁掉。那么瀏覽器緩存究竟...
摘要:對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。那么瀏覽器緩存究竟是個(gè)什么樣的神奇玩意呢什么是瀏覽器緩存簡單來說,瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過的資源如頁面,圖片,,數(shù)據(jù)等拷貝一份副本儲(chǔ)存在瀏覽器中。 對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。一方面極大地提升了用戶體驗(yàn),而另一方面有時(shí)會(huì)因?yàn)樽x取了緩存而展示了錯(cuò)誤的東西,而在開發(fā)過程中千方百計(jì)地想把緩存禁掉。那么瀏覽器緩存究竟...
瀏覽器緩存機(jī)制學(xué)習(xí)總結(jié) 最近在做一個(gè)考試系統(tǒng)時(shí),由于經(jīng)常加載試卷或圖片等等靜態(tài)資源,抽空學(xué)習(xí)了一下緩存機(jī)制,在此記錄 為什么要使用緩存 1、通過HTTP協(xié)議,在客戶端和瀏覽器建立連接時(shí)需要消耗時(shí)間,而大的響應(yīng)需要在客戶端和服務(wù)器之間進(jìn)行多次往返通信才能獲得完整的響應(yīng),這拖延了瀏覽器可以使用和處理內(nèi)容的時(shí)間。這就增加了訪問服務(wù)器的數(shù)據(jù)和資源的成本,因此利用瀏覽器的緩存機(jī)制重用以前獲取的數(shù)據(jù)就變成了性...
閱讀 1451·2021-11-04 16:11
閱讀 3127·2021-10-12 10:11
閱讀 3081·2021-09-29 09:47
閱讀 1678·2021-09-22 15:40
閱讀 1092·2019-08-29 15:43
閱讀 2868·2019-08-29 13:50
閱讀 1649·2019-08-29 13:28
閱讀 2753·2019-08-29 12:54