成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一張圖理解Http緩存

劉永祥 / 1216人閱讀

摘要:用戶發(fā)起了一個(gè)請(qǐng)求后,瀏覽器發(fā)現(xiàn)先本地已有所請(qǐng)求資源的緩存,便開始檢查緩存是否過期。表明只有特定用戶才能使用緩存,適用于公共緩存服務(wù)器的情況。用戶行為最后附一張圖說明用戶行為對(duì)瀏覽器緩存的影響

參閱了一些瀏覽器緩存的資料,本文通過一張圖來歸納總結(jié)其過程。

瀏覽器第一次向一個(gè)web服務(wù)器發(fā)起http請(qǐng)求后,服務(wù)器會(huì)返回請(qǐng)求的資源,并且在響應(yīng)頭中添加一些有關(guān)緩存的字段如:Cache-ControlExpires、Last-Modified、ETag、Date等等。之后瀏覽器再向該服務(wù)器請(qǐng)求該資源就可以視情況使用強(qiáng)緩存協(xié)商緩存。

強(qiáng)緩存:瀏覽器直接從本地緩存中獲取數(shù)據(jù),不與服務(wù)器進(jìn)行交互。

協(xié)商緩存:瀏覽器發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器判定是否可使用本地緩存。

聯(lián)系與區(qū)別:兩種緩存方式最終使用的都是本地緩存;前者無需與服務(wù)器交互,后者需要。

下面假定瀏覽器已經(jīng)訪問了服務(wù)器,服務(wù)器返回了緩存相關(guān)的頭部字段且瀏覽器已對(duì)相關(guān)資源做好緩存。通過下圖來分析強(qiáng)緩存和協(xié)商緩存:

強(qiáng)緩存

如圖紅線所示的過程代表強(qiáng)緩存。用戶發(fā)起了一個(gè)http請(qǐng)求后,瀏覽器發(fā)現(xiàn)先本地已有所請(qǐng)求資源的緩存,便開始檢查緩存是否過期。有兩個(gè)http頭部字段控制緩存的有效期:ExpiresCache-Control,瀏覽器是根據(jù)以下兩步來判定緩存是否過期的:

查看緩存是否有Cache-Controls-maxagemax-age指令,若有,則使用響應(yīng)報(bào)文生成時(shí)間Date + s-maxage/max-age獲得過期時(shí)間,再與當(dāng)前時(shí)間進(jìn)行對(duì)比(s-maxage適用于多用戶使用的公共緩存服務(wù)器);

如果沒有Cache-Controls-maxagemax-age指令,則比較Expires中的過期時(shí)間與當(dāng)前時(shí)間。Expires是一個(gè)絕對(duì)時(shí)間。

注意,在HTTP/1.1中,當(dāng)首部字段Cache-Control有指定s-maxagemax-age指令,比起首部字段Expires,會(huì)優(yōu)先處理s-maxagemax-age。

另外下面列幾個(gè)Cache-Control的常用指令:

no-cache:含義是不使用本地緩存,需要使用協(xié)商緩存,也就是先與服務(wù)器確認(rèn)緩存是否可用。

no-store:禁用緩存。

public:表明其他用戶也可使用緩存,適用于公共緩存服務(wù)器的情況。

private:表明只有特定用戶才能使用緩存,適用于公共緩存服務(wù)器的情況。

經(jīng)過上述兩步判斷后,若緩存未過期,返回狀態(tài)碼為200,則直接從本地讀取緩存,這就完成了整個(gè)強(qiáng)緩存過程;如果緩存過期,則進(jìn)入?yún)f(xié)商緩存或服務(wù)器返回新資源過程。

協(xié)商緩存

當(dāng)瀏覽器發(fā)現(xiàn)緩存過期后,緩存并不一定不能使用了,因?yàn)榉?wù)器端的資源可能仍然沒有改變,所以需要與服務(wù)器協(xié)商,讓服務(wù)器判斷本地緩存是否還能使用。此時(shí)瀏覽器會(huì)判斷緩存中是否有ETagLast-Modified字段,如果沒有,則發(fā)起一個(gè)http請(qǐng)求,服務(wù)器根據(jù)請(qǐng)求返回資源;如果有這兩個(gè)字段,則在請(qǐng)求頭中添加If-None-Match字段(有ETag字段的話添加)、If-Modified-Since字段(有Last-Modified字段的話添加)。注意:如果同時(shí)發(fā)送If-None-Match 、If-Modified-Since字段,服務(wù)器只要比較If-None-MatchETag的內(nèi)容是否一致即可;如果內(nèi)容一致,服務(wù)器認(rèn)為緩存仍然可用,則返回狀態(tài)碼304,瀏覽器直接讀取本地緩存,這就完成了協(xié)商緩存的過程,也就是圖中的藍(lán)線;如果內(nèi)容不一致,則視情況返回其他狀態(tài)碼,并返回所請(qǐng)求資源。下面詳細(xì)解釋下這個(gè)過程:

1.ETagIf-None-Match

二者的值都是服務(wù)器為每份資源分配的唯一標(biāo)識(shí)字符串。

瀏覽器請(qǐng)求資源,服務(wù)器會(huì)在響應(yīng)報(bào)文頭中加入ETag字段。資源更新時(shí),服務(wù)器端的ETag值也隨之更新;

瀏覽器再次請(qǐng)求資源時(shí),會(huì)在請(qǐng)求報(bào)文頭中添加If-None-Match字段,它的值就是上次響應(yīng)報(bào)文中的ETag的值;

服務(wù)器會(huì)比對(duì)ETagIf-None-Match的值是否一致,如果不一致,服務(wù)器則接受請(qǐng)求,返回更新后的資源;如果一致,表明資源未更新,則返回狀態(tài)碼為304的響應(yīng),可繼續(xù)使用本地緩存,要注意的是,此時(shí)響應(yīng)頭會(huì)加上ETag字段,即使它沒有變化。

2.Last-ModifiedIf-Modified-Since

二者的值都是GMT格式的時(shí)間字符串。

瀏覽器第一次向服務(wù)器請(qǐng)求資源后,服務(wù)器會(huì)在響應(yīng)頭中加上Last-Modified字段,表明該資源最后一次的修改時(shí)間;

瀏覽器再次請(qǐng)求該資源時(shí),會(huì)在請(qǐng)求報(bào)文頭中添加If-Modified-Since字段,它的值就是上次服務(wù)器響應(yīng)報(bào)文中的Last-Modified的值;

服務(wù)器會(huì)比對(duì)Last-ModifiedIf-Modified-Since的值是否一致,如果不一致,服務(wù)器則接受請(qǐng)求,返回更新后的資源;如果一致,表明資源未更新,則返回狀態(tài)碼為304的響應(yīng),可繼續(xù)使用本地緩存,與ETag不同的是:此時(shí)響應(yīng)頭中不會(huì)再添加Last-Modified字段。

3.ETag較之Last-Modified的優(yōu)勢(shì)

以下內(nèi)容引用于:http協(xié)商緩存VS強(qiáng)緩存

你可能會(huì)覺得使用Last-Modified已經(jīng)足以讓瀏覽器知道本地的緩存副本是否足夠新,為什么還需要ETag呢?HTTP1.1ETag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問題:

一些文件也許會(huì)周期性的更改,但是他的內(nèi)容并不改變(僅僅改變的修改時(shí)間),這個(gè)時(shí)候我們并不希望客戶端認(rèn)為這個(gè)文件被修改了,而重新GET;

某些文件修改非常頻繁,比如在秒以下的時(shí)間內(nèi)進(jìn)行修改,(比方說1s內(nèi)修改了N次),If-Modified-Since能檢查到的粒度是s級(jí)的,這種修改無法判斷(或者說UNIX記錄MTIME只能精確到秒);

某些服務(wù)器不能精確的得到文件的最后修改時(shí)間。

這時(shí),利用ETag能夠更加準(zhǔn)確的控制緩存,因?yàn)?b>ETag是服務(wù)器自動(dòng)生成的資源在服務(wù)器端的唯一標(biāo)識(shí)符,資源每次變動(dòng),都會(huì)生成新的ETag值。Last-ModifiedETag是可以一起使用的,但服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag。

用戶行為

最后附一張圖說明用戶行為對(duì)瀏覽器緩存的影響:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/62014.html

相關(guān)文章

  • 張圖總結(jié)web緩存策略

    摘要:從效率上來說,它是響應(yīng)速度最快的一種緩存。緩存緩存分為強(qiáng)緩存和協(xié)商緩存。是指在階段存在的緩存。服務(wù)器緩存,即內(nèi)容分發(fā)網(wǎng)絡(luò)指的是一組分布在各個(gè)地區(qū)的服務(wù)器。的核心點(diǎn)有兩個(gè),一個(gè)是緩存,一個(gè)是回源。作用域和都遵循同源策略。 showImg(https://segmentfault.com/img/bVbocad?w=1297&h=1081); 1 瀏覽器緩存 瀏覽器緩存機(jī)制有四個(gè)方面,它們...

    macg0406 評(píng)論0 收藏0
  • [拆彈時(shí)刻]小程序canvas生成海報(bào)(二)---優(yōu)化方案

    摘要:注意如果用戶一開始沒有微信授權(quán),生成海報(bào)時(shí)又必須要用戶頭像不能使用默認(rèn)的話,那就只能老老實(shí)實(shí)走之前的流程了。組件名稱終端類型微信版本觸發(fā)方法關(guān)于的調(diào)用方法相冊(cè)權(quán)限需要你提供保存相冊(cè)權(quán)限獲取相冊(cè)權(quán)限成功,給出再次點(diǎn)擊圖片保存到相冊(cè)的提示。 showImg(https://segmentfault.com/img/bVbs5V8?w=343&h=517);海報(bào)生成示例 海報(bào)生成速度緩慢...

    LittleLiByte 評(píng)論0 收藏0
  • Android性能優(yōu)化之內(nèi)存優(yōu)化

    摘要:導(dǎo)語智能手機(jī)發(fā)展到今天已經(jīng)有十幾個(gè)年頭,手機(jī)的軟硬件都已經(jīng)發(fā)生了翻天覆地的變化,特別是陣營(yíng),從一開始的一兩百到今天動(dòng)輒,內(nèi)存。恰好最近做了內(nèi)存優(yōu)化相關(guān)的工作,這里也對(duì)內(nèi)存優(yōu)化相關(guān)的知識(shí)做下總結(jié)。 導(dǎo)語 智能手機(jī)發(fā)展到今天已經(jīng)有十幾個(gè)年頭,手機(jī)的軟硬件都已經(jīng)發(fā)生了翻天覆地的變化,特別是Android陣營(yíng),從一開始的一兩百M(fèi)到今天動(dòng)輒4G,6G內(nèi)存。然而大部分的開發(fā)者觀看下自己的異常上報(bào)系...

    cheng10 評(píng)論0 收藏0
  • 張圖讓自己搞懂(mēng)原型&原型鏈

    摘要:要搞清這三種關(guān)系指向之間的關(guān)系拗口,其實(shí)也就是要搞懂,構(gòu)造函數(shù)由構(gòu)造函數(shù)操作創(chuàng)造出的實(shí)例對(duì)象和構(gòu)造函數(shù)的原型對(duì)象之間的關(guān)系。 寫在前面 這篇博客來源于,有天mentor突然傳給我了這張祖?zhèn)鞯膱D片,并且發(fā)誓一定要給我講清楚,然鵝在他的一番激情講解之后,他自己也被繞懵了...于是后來我決定整理一下似乎還有點(diǎn)清晰的思路,記錄一下我對(duì)這張圖的理解。作為一個(gè)小白,對(duì)于js中這些比較復(fù)雜的概念的理...

    CntChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

劉永祥

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<