国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一張圖理解Http緩存

劉永祥 / 1208人閱讀

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

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

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

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

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

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

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

強緩存

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

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

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

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

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

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

no-store:禁用緩存。

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

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

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

協(xié)商緩存

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

1.ETagIf-None-Match

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

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

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

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

2.Last-ModifiedIf-Modified-Since

二者的值都是GMT格式的時間字符串。

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

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

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

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

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

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

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

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

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

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

用戶行為

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/62014.html

相關(guān)文章

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

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

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

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

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

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

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

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

    CntChen 評論0 收藏0

發(fā)表評論

0條評論

劉永祥

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<