摘要:瀏覽器先向網(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ò)展性。參考資料緩存機(jī)制系列
什么是web緩存
web緩存類型 數(shù)據(jù)庫數(shù)據(jù)緩存Web緩存是指一個(gè)Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的副本;當(dāng)下一個(gè)請(qǐng)求來到的時(shí)候,如果是相同的URL,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪問請(qǐng)求,還是向源服務(wù)器再次發(fā)送請(qǐng)求。比較常見的就是瀏覽器會(huì)緩存訪問過網(wǎng)站的網(wǎng)頁,當(dāng)再次訪問這個(gè)URL地址的時(shí)候,如果網(wǎng)頁沒有更新,就不會(huì)再次下載網(wǎng)頁,而是直接使用本地緩存的網(wǎng)頁。只有當(dāng)網(wǎng)站明確標(biāo)識(shí)資源已經(jīng)更新,瀏覽器才會(huì)再次下載網(wǎng)頁
Web應(yīng)用,特別是SNS類型的應(yīng)用,往往關(guān)系比較復(fù)雜,數(shù)據(jù)庫表繁多,如果頻繁進(jìn)行數(shù)據(jù)庫查詢,很容易導(dǎo)致數(shù)據(jù)庫不堪重荷。為了提供查詢的性能,會(huì)將查詢后的數(shù)據(jù)放到內(nèi)存中進(jìn)行緩存,下次查詢時(shí),直接從內(nèi)存緩存直接返回,提供響應(yīng)效率。比如常用的緩存方案有memcached等。
服務(wù)器端緩存代理服務(wù)器緩存
代理服務(wù)器是瀏覽器和源服務(wù)器之間的中間服務(wù)器,瀏覽器先向這個(gè)中間服務(wù)器發(fā)起Web請(qǐng)求,經(jīng)過處理后(比如權(quán)限驗(yàn)證,緩存匹配等),再將請(qǐng)求轉(zhuǎn)發(fā)到源服務(wù)器。代理服務(wù)器緩存的運(yùn)作原理跟瀏覽器的運(yùn)作原理差不多,只是規(guī)模更大??梢园阉斫鉃橐粋€(gè)共享緩存,不只為一個(gè)用戶服務(wù),一般為大量用戶提供服務(wù),因此在減少相應(yīng)時(shí)間和帶寬使用方面很有效,同一個(gè)副本會(huì)被重用多次。常見代理服務(wù)器緩存解決方案有Squid等
CDN緩存
CDN(Content delivery networks)緩存,也叫網(wǎng)關(guān)緩存、反向代理緩存。CDN緩存一般是由網(wǎng)站管理員自己部署,為了讓他們的網(wǎng)站更容易擴(kuò)展并獲得更好的性能。瀏覽器先向CDN網(wǎng)關(guān)發(fā)起Web請(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ò)展性。
瀏覽器緩存根據(jù)一套與服務(wù)器約定的規(guī)則進(jìn)行工作,在同一個(gè)會(huì)話過程中會(huì)檢查一次并確定緩存的副本足夠新。如果你瀏覽過程中,比如前進(jìn)或后退,訪問到同一個(gè)圖片,這些圖片可以從瀏覽器緩存中調(diào)出而即時(shí)顯現(xiàn)。
Web應(yīng)用層緩存應(yīng)用層緩存指的是從代碼層面上,通過代碼邏輯和緩存策略,實(shí)現(xiàn)對(duì)數(shù)據(jù),頁面,圖片等資源的緩存,可以根據(jù)實(shí)際情況選擇將數(shù)據(jù)存在文件系統(tǒng)或者內(nèi)存中,減少數(shù)據(jù)庫查詢或者讀寫瓶頸,提高響應(yīng)效率。
web緩存工作原理所有的緩存都是基于一套規(guī)則來幫助他們決定什么時(shí)候使用緩存中的副本提供服務(wù)(假設(shè)有副本可用的情況下,未被銷毀回收或者未被刪除修改)。這些規(guī)則有的在協(xié)議中有定義(如HTTP協(xié)議1.0和2.0),有的則是由緩存的管理員設(shè)置(如DBA、瀏覽器的用戶、代理服務(wù)器管理員或者應(yīng)用開發(fā)者)
瀏覽器端的緩存規(guī)則對(duì)于瀏覽器端的緩存來講,這些規(guī)則是在HTTP協(xié)議頭和HTML頁面的Meta標(biāo)簽中定義的。他們分別從新鮮度和校驗(yàn)值兩個(gè)維度來規(guī)定瀏覽器是否可以直接使用緩存中的副本,還是需要去源服務(wù)器獲取更新的版本。
新鮮度(過期機(jī)制):也就是緩存副本有效期。一個(gè)緩存副本必須滿足以下條件,瀏覽器會(huì)認(rèn)為它是有效的,足夠新的:
含有完整的過期時(shí)間控制頭信息(HTTP協(xié)議報(bào)頭Cache-Control與Expires),并且仍在有效期內(nèi);
如果已經(jīng)超過有效期,發(fā)起請(qǐng)求到服務(wù)器驗(yàn)證Etag,如果沒有更新,還是使用瀏覽器緩存
滿足以上兩個(gè)情況的一種,瀏覽器會(huì)直接從緩存中獲取副本并渲染。
校驗(yàn)值(驗(yàn)證機(jī)制):
Cache-Control與Expires的作用一致,都是指明當(dāng)前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請(qǐng)求到服務(wù)器取數(shù)據(jù)。只不過Cache-Control的選擇更多,設(shè)置更細(xì)致,如果同時(shí)設(shè)置的話,其優(yōu)先級(jí)高于Expires。
服務(wù)器返回資源的時(shí)候有時(shí)在控制頭信息帶上這個(gè)資源的實(shí)體標(biāo)簽Etag(Entity Tag),它可以用來作為瀏覽器再次請(qǐng)求過程的校驗(yàn)標(biāo)識(shí)。如過發(fā)現(xiàn)校驗(yàn)標(biāo)識(shí)不匹配,說明資源已經(jīng)被修改或過期,瀏覽器需求重新獲取資源內(nèi)容。
如果檢測(cè)到本地的緩存還是有效的時(shí)間范圍內(nèi),瀏覽器直接使用本地副本,不會(huì)發(fā)送任何請(qǐng)求。兩者一起使用時(shí),Cache-Control/Expires的優(yōu)先級(jí)要高于Last-Modified/ETag。即當(dāng)本地副本根據(jù)Cache-Control/Expires發(fā)現(xiàn)還在有效期內(nèi)時(shí),則不會(huì)再次發(fā)送請(qǐng)求去服務(wù)器詢問修改時(shí)間(Last-Modified)或?qū)嶓w標(biāo)識(shí)(Etag)了。
緩存有關(guān)的HTTP消息報(bào)頭
一般情況下,使用Cache-Control/Expires會(huì)配合Last-Modified/ETag一起使用,因?yàn)榧词狗?wù)器設(shè)置緩存時(shí)間, 當(dāng)用戶點(diǎn)擊“刷新”按鈕時(shí),瀏覽器會(huì)忽略緩存繼續(xù)向服務(wù)器發(fā)送請(qǐng)求,這時(shí)Last-Modified/ETag將能夠很好利用304,從而減少響應(yīng)開銷。
你可能會(huì)覺得使用Last-Modified已經(jīng)足以讓瀏覽器知道本地的緩存副本是否足夠新,為什么還需要Etag(實(shí)體標(biāo)識(shí))呢?HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問題:
Last-Modified標(biāo)注的最后修改只能精確到秒級(jí),如果某些文件在1秒鐘以內(nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的新鮮度
如果某些文件會(huì)被定期生成,當(dāng)有時(shí)內(nèi)容并沒有任何變化,但Last-Modified卻改變了,導(dǎo)致文件沒法使用緩存
有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時(shí)間,或者與代理服務(wù)器時(shí)間不一致等情形
Etag是服務(wù)器自動(dòng)生成或者由開發(fā)者生成的對(duì)應(yīng)資源在服務(wù)器端的唯一標(biāo)識(shí)符,能夠更加準(zhǔn)確的控制緩存。Last-Modified與Etag是可以一起使用的,服務(wù)器會(huì)優(yōu)先驗(yàn)證Etag,一致的情況下,才會(huì)繼續(xù)比對(duì)Last-Modified,最后才決定是否返回304
用戶在使用瀏覽器的時(shí)候,會(huì)有各種操作,比如輸入地址后回車,按F5刷新等,這些行為會(huì)對(duì)緩存有什么影響呢?
通過上表我們可以看到,當(dāng)用戶在按F5進(jìn)行刷新的時(shí)候,會(huì)忽略Cache-Control/Expires的設(shè)置,會(huì)再次發(fā)送請(qǐng)求去服務(wù)器請(qǐng)求,而Last-Modified/ETag還是有效的,服務(wù)器會(huì)根據(jù)情況判斷返回304還是200;而當(dāng)用戶使用Ctrl+F5進(jìn)行強(qiáng)制刷新的時(shí)候,只是所有的緩存機(jī)制都將失效,重新從服務(wù)器拉去資源。
Web緩存機(jī)制系列
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61812.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 ...
摘要:根據(jù)標(biāo)準(zhǔn),到目前為止,一共有種緩存機(jī)制,有些是之前已有,有些是才新加入的。首次請(qǐng)求緩存有效期內(nèi)請(qǐng)求緩存過期后請(qǐng)求一般瀏覽器會(huì)將緩存記錄及緩存文件存在本地文件夾中。 騰訊 Bugly 特約作者:賀輝超 1. H5 緩存機(jī)制介紹 H5,即 HTML5,是新一代的 HTML 標(biāo)準(zhǔn),加入很多新的特性。離線存儲(chǔ)(也可稱為緩存機(jī)制)是其中一個(gè)非常重要的特性。H5 引入的離線存儲(chǔ),這意味著 web ...
摘要:瀏覽器先向網(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ò)展性。參考資料緩存機(jī)制系列 什么是web緩存 Web緩存是指一個(gè)Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在于Web服務(wù)器和客戶端(瀏覽器)之間的副本。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的...
摘要:對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。那么瀏覽器緩存究竟是個(gè)什么樣的神奇玩意呢什么是瀏覽器緩存簡(jiǎn)單來說,瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過的資源如頁面,圖片,,數(shù)據(jù)等拷貝一份副本儲(chǔ)存在瀏覽器中。 對(duì)于瀏覽器緩存,相信很多開發(fā)者對(duì)它真的是又愛又恨。一方面極大地提升了用戶體驗(yàn),而另一方面有時(shí)會(huì)因?yàn)樽x取了緩存而展示了錯(cuò)誤的東西,而在開發(fā)過程中千方百計(jì)地想把緩存禁掉。那么瀏覽器緩存究竟...
閱讀 3577·2023-04-26 02:05
閱讀 2021·2021-11-19 11:30
閱讀 4230·2021-09-30 09:59
閱讀 3184·2021-09-10 10:51
閱讀 2614·2021-09-01 10:30
閱讀 1496·2021-08-11 11:20
閱讀 2626·2019-08-30 15:54
閱讀 572·2019-08-30 10:49