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