摘要:瀏覽器緩存瀏覽器緩存是將文件保存在客戶端。是服務(wù)器響應(yīng)消息頭字段,在響應(yīng)請(qǐng)求時(shí)告訴瀏覽器在過期時(shí)間內(nèi)瀏覽器可以直接從瀏覽器緩存讀取數(shù)據(jù),無需再次請(qǐng)求。
緩存分類
web緩存分為很多種,比如數(shù)據(jù)庫緩存、代理服務(wù)器緩存、CDN緩存,以及瀏覽器緩存。
瀏覽器通過代理服務(wù)器向源服務(wù)器發(fā)起請(qǐng)求的原理如圖。
瀏覽器先向代理服務(wù)器發(fā)起Web請(qǐng)求,再將請(qǐng)求發(fā)到源服務(wù)器。它屬于共享緩存,所以很多地方都可以使用其緩存資源,所以節(jié)省了很多流量。
瀏覽器緩存瀏覽器緩存是將文件保存在客戶端。在同一個(gè)回話過程中檢查緩存的副本是否足夠新,在后退網(wǎng)頁時(shí),訪問過的資源可以從瀏覽器緩存中拿出來使用。
瀏覽器一般都是通過http緩存的,但是也可以通過其他方式,如在html頁面中的meta標(biāo)簽增加屬性,但不是所有瀏覽器都支持的,因?yàn)橛行g覽器不能理解HTML內(nèi)容本身
HTTP中的header來控制的緩存
大多數(shù)的瀏覽器緩存都是有http的header所決定的。
ExpiresExpires: 是Web服務(wù)器響應(yīng)消息頭字段,在響應(yīng)http請(qǐng)求時(shí)告訴瀏覽器在過期時(shí)間內(nèi)瀏覽器可以直接從瀏覽器緩存讀取數(shù)據(jù),無需再次請(qǐng)求。但是Expires是HTTP1.0的東西,在HTTP1.1中,他的作用基本上可以忽略。
1.max-age 指定設(shè)置緩存最大的有效時(shí)間,定義的是時(shí)間長短。當(dāng)瀏覽器向服務(wù)器發(fā)送請(qǐng)求后,在max-age這段時(shí)間里,瀏覽器就不會(huì)再向服務(wù)器發(fā)送請(qǐng)求了。
2.s-maxage與max-age一樣,只用于共享緩存(如CDN緩存)。如s-maxage=60,在這60秒呢,即使更新了CDN的內(nèi)容,瀏覽器呀不會(huì)發(fā)送請(qǐng)求。max-age用于普通緩存,而s-maxage用于代理緩存。如果存在s-maxage,則會(huì)覆蓋掉max-age和Expires header.
3.public指定響應(yīng)會(huì)被緩存,并且在多用戶間共享。默認(rèn)是public。
private響應(yīng)只為私有緩存,不能在用戶間共享
4.設(shè)置no-chache表明資源不進(jìn)行緩存,但是設(shè)置了no-cache之后,并不代表瀏覽器不緩存,而是在緩存前要向?yàn)g覽器確認(rèn)資源是否被更改。有的時(shí)候只設(shè)置no-cache防止緩存還是不夠保險(xiǎn),還可以加上private指令,將過期時(shí)間設(shè)為過去的時(shí)間。
Cache-control策略Cache-control策略:與Expires的作用是一致的,都是指當(dāng)前資源的有效期,控制瀏覽器是直接從瀏覽器緩存中存取數(shù)據(jù),還是重新發(fā)送請(qǐng)求到服務(wù)器取數(shù)據(jù)。它的優(yōu)先級(jí)高于Expires,而且它的選擇更多,設(shè)置也更細(xì)致。
Last-Modified/If-Modified-Since
Last-Modified/If-Modified-Since要配合Cache-Control使用
Last-Modified: 表示這個(gè)資源的最后修改時(shí)間。Web服務(wù)器在響應(yīng)請(qǐng)求時(shí),告訴瀏覽器資源的最后修改時(shí)間。當(dāng)瀏覽器再次進(jìn)行請(qǐng)求時(shí),會(huì)向服務(wù)器傳送If-Modified-Since抱頭,詢問Last-Modified時(shí)間點(diǎn)之后資源是否被修改。
If-Modified-Since: 當(dāng)資源過期時(shí)(用Cache-Control標(biāo)識(shí)的max-age),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向Web服務(wù)器請(qǐng)求頭帶上If-Modified-Since,表示請(qǐng)求時(shí)間。Web服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭信息If-Modified-Since,則與被請(qǐng)求資源的最后修改時(shí)間進(jìn)行比較。若最后修改時(shí)間比較新,說明資源修改過,則返回相應(yīng)整片資源內(nèi)容(卸載響應(yīng)消息包體內(nèi)),HTTP Code為200; 若最后修改時(shí)間比較舊,說明資源沒有更新,則相應(yīng)的HTTP Code為304,告訴瀏覽器使用所保存的緩存。
ETag/If-None-Match
ETag/If-None-Match: 也要配合Cache-Control使用
ETag:web服務(wù)器相應(yīng)請(qǐng)求時(shí),告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器產(chǎn)生)。Apache中,ETag的值,默認(rèn)是對(duì)文件的索引節(jié)(INode),大?。⊿ize)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的。
If-None-Match:當(dāng)資源過期時(shí)(使用Cache-Control標(biāo)識(shí)的max-age),發(fā)現(xiàn)資源具有ETag聲明,則再次向Web服務(wù)器請(qǐng)求時(shí)帶上頭信息If-None-Match(ETag的值)。Web服務(wù)器收到請(qǐng)求后,頭信息If-None-Cache與被請(qǐng)求的資源進(jìn)行校驗(yàn)串比較,然后返回200或者304.
你可能覺得Last-Modified已經(jīng)足夠讓瀏覽器知道本地緩存是否是最新的,為什么還是要增加ETag呢?
HTTP1.1中的ETag的出現(xiàn)主要為了解決幾個(gè)Last-Modified中比較難解決的問題:
Last-Modifed標(biāo)注的最后修改只能精確到秒,如果某些文件在1秒以內(nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間
某些文件會(huì)被定期生成,當(dāng)時(shí)內(nèi)容并沒有發(fā)生任何變化,但Modified卻變了,導(dǎo)致文件沒法使用緩存
有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時(shí)間,或者與代理服務(wù)器的時(shí)間不一致等情形
ETag是服務(wù)器自動(dòng)生成,或者由開發(fā)者對(duì)生成的對(duì)應(yīng)資源在服務(wù)器端的唯一標(biāo)識(shí)符,能夠更加準(zhǔn)確的控制緩存。Last-Modified與ETag可以一起使用,服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag,一致的情況下,才會(huì)繼續(xù)對(duì)Last-Modifed,最后才決定是否返回304.
cache-control指令的使用
幾篇不錯(cuò)的緩存的文章
瀏覽器緩存知識(shí)小結(jié)及應(yīng)用
瀏覽器緩存
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61840.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 ...
摘要:對(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ì)地想把緩存禁掉。那么瀏覽器緩存究竟...
摘要:從瀏覽器角度來看,整個(gè)就是一個(gè)源服務(wù)器,從這個(gè)層面來說,瀏覽器和服務(wù)器之間的緩存機(jī)制,在這種架構(gòu)下同樣適用。如果命中,則返回,告訴瀏覽器資源未更新,可使用本地的緩存。 緩存類型 緩存在宏觀上可以分成兩類:私有緩存和共享緩存。共享緩存就是那些能被各級(jí)代理緩存的緩存。私有緩存就是用戶專享的,各級(jí)代理不能緩存的緩存。 微觀上可以分下面幾類: 瀏覽器緩存 緩存存在的意義就是當(dāng)用戶點(diǎn)擊back按...
閱讀 3680·2021-09-02 15:11
閱讀 4623·2021-08-16 10:47
閱讀 1575·2019-08-29 18:35
閱讀 3061·2019-08-28 17:54
閱讀 2859·2019-08-26 11:37
閱讀 1512·2019-08-23 16:51
閱讀 1823·2019-08-23 14:36
閱讀 1818·2019-08-23 14:21