国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
瀏覽器緩存詳解:expires,cache

 最近在對CDN進行優(yōu)化,對瀏覽器緩存深入研究了一下,記錄一下,方便后來者

畫了一個草圖:



每個狀態(tài)的詳細說明如下:

1Last-Modified

在瀏覽器第一次請求某一個URL時,服務(wù)器端的返回狀態(tài)會是200,內(nèi)容是你請求的資源,同時有一個Last-Modified的屬性標(biāo)記(HttpReponse Header)此文件在服務(wù)期端最后被修改的時間,格式類似這樣:

Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT

客戶端第二次請求此URL時,根據(jù)HTTP協(xié)議的規(guī)定,瀏覽器會向服務(wù)器傳送If-Modified-Since報頭(HttpRequest Header),詢問該時間之后文件是否有被修改過:

If-Modified-Since:Tue, 24 Feb 2009 08:01:04 GMT

如果服務(wù)器端的資源沒有變化,則自動返回HTTP304NotChanged.)狀態(tài)碼,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量。當(dāng)服務(wù)器端代碼發(fā)生改變或者重啟服務(wù)器時,則重新發(fā)出資源,返回和第一次請求時類似。從而保證不向客戶端重復(fù)發(fā)出資源,也保證當(dāng)服務(wù)器有變化時,客戶端能夠得到最新的資源。

注:如果If-Modified-Since的時間比服務(wù)器當(dāng)前時間(當(dāng)前的請求時間request_time)還晚,會認為是個非法請求


2、Etag工作原理

HTTP協(xié)議規(guī)格說明定義ETag為“被請求變量的實體標(biāo)記”(參見14.19)。簡單點即服務(wù)器響應(yīng)時給請求URL標(biāo)記,并在HTTP響應(yīng)頭中將其傳送到客戶端,類似服務(wù)器端返回的格式:

Etag:“5d8c72a5edda8d6a:3239″

客戶端的查詢更新格式是這樣的:

If-None-Match:“5d8c72a5edda8d6a:3239″

如果ETag沒改變,則返回狀態(tài)304。

:在客戶端發(fā)出請求后,HttpReponse Header中包含Etag:“5d8c72a5edda8d6a:3239″

標(biāo)識,等于告訴Client端,你拿到的這個的資源有表示ID5d8c72a5edda8d6a:3239。當(dāng)下次需要發(fā)Request索要同一個URI的時候,瀏覽器同時發(fā)出一個If-None-Match報頭(Http RequestHeader)此時包頭中信息包含上次訪問得到的Etag:“5d8c72a5edda8d6a:3239″標(biāo)識。

If-None-Match:“5d8c72a5edda8d6a:3239“

,這樣,Client端等于Cache了兩份,服務(wù)器端就會比對2者的etag。如果If-None-MatchFalse,不返回200,返回304(Not Modified) Response。


3Expires

給出的日期/時間后,被響應(yīng)認為是過時。如Expires:Thu, 02 Apr 2009 05:14:08 GMT

需和Last-Modified結(jié)合使用。用于控制請求文件的有效時間,當(dāng)請求數(shù)據(jù)在有效期內(nèi)時客戶端瀏覽器從緩存請求數(shù)據(jù)而不是服務(wù)器端.當(dāng)緩存中數(shù)據(jù)失效或過期,才決定從服務(wù)器更新數(shù)據(jù)。


4Last-ModifiedExpires

Last-Modified標(biāo)識能夠節(jié)省一點帶寬,但是還是逃不掉發(fā)一個HTTP請求出去,而且要和Expires一起用。而Expires標(biāo)識卻使得瀏覽器干脆連HTTP請求都不用發(fā),比如當(dāng)用戶F5或者點擊Refresh按鈕的時候就算對于有ExpiresURI,一樣也會發(fā)一個HTTP請求出去,所以,Last-Modified還是要用的,而且要和Expires一起用。



5、EtagExpires

如果服務(wù)器端同時設(shè)置了EtagExpires時,Etag原理同樣,即與Last-Modified/Etag對應(yīng)的HttpRequestHeader:If-Modified-SinceIf-None-Match。我們可以看到這兩個Header的值和WebServer發(fā)出的Last-Modified,Etag值完全一樣;在完全匹配If-Modified-SinceIf-None-Match即檢查完修改時間和Etag之后,服務(wù)器才能返回304.



6、Last-ModifiedEtag

分布式系統(tǒng)里多臺機器間文件的last-modified必須保持一致,以免負載均衡到不同機器導(dǎo)致比對失敗

分布式系統(tǒng)盡量關(guān)閉掉Etag(每臺機器生成的etag都會不一樣)

Last-ModifiedETags請求的http報頭一起使用,服務(wù)器首先產(chǎn)生Last-Modified/Etag標(biāo)記,服務(wù)器可在稍后使用它來判斷頁面是否已經(jīng)被修改,來決定文件是否繼續(xù)緩存

過程如下:

1.客戶端請求一個頁面(A)。

2.服務(wù)器返回頁面A,并在給A加上一個Last-Modified/ETag

3.客戶端展現(xiàn)該頁面,并將頁面連同Last-Modified/ETag一起緩存。

4.客戶再次請求頁面A,并將上次請求時服務(wù)器返回的Last-Modified/ETag一起傳遞給服務(wù)器。

5.服務(wù)器檢查該Last-ModifiedETag,并判斷出該頁面自上次客戶端請求之后還未被修改,直接返回響應(yīng)304和一個空的響應(yīng)體。

注:

1、Last-ModifiedEtag頭都是由WebServer發(fā)出的HttpReponse Header,WebServer應(yīng)該同時支持這兩種頭。

2、WebServer發(fā)送完Last-Modified/Etag頭給客戶端后,客戶端會緩存這些頭;

3、客戶端再次發(fā)起相同頁面的請求時,將分別發(fā)送與Last-Modified/Etag對應(yīng)的HttpRequestHeader:If-Modified-SinceIf-None-Match。我們可以看到這兩個Header的值和WebServer發(fā)出的Last-Modified,Etag值完全一樣;

4、通過上述值到服務(wù)器端檢查,判斷文件是否繼續(xù)緩存;


7、關(guān)于 Cache-Control: max-age=秒 和 Expires

Expires = 時間,HTTP 1.0 版本,緩存的載止時間,允許客戶端在這個時間之前不去檢查(發(fā)請求)
max-age = 秒,HTTP 1.1版本,資源在本地緩存多少秒。
如果max-age和Expires同時存在,則被Cache-Control的max-age覆蓋。

Expires 的一個缺點就是,返回的到期時間是服務(wù)器端的時間,這樣存在一個問題,如果客戶端的時間與服務(wù)器的時間相差很大,那么誤差就很大,所以在HTTP 1.1版開始,使用Cache-Control: max-age=秒替代。

Expires =max-age +   “每次下載時的當(dāng)前的request時間”

所以一旦重新下載的頁面后,expires就重新計算一次,但last-modified不會變化 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【W(wǎng)eb緩存機制概述】2 – Web瀏覽器的緩存機制
apache PHP如何利用HTTP緩存協(xié)議原理解析及應(yīng)用指南
服務(wù)器網(wǎng)頁緩存的深入分析
Http頭介紹:Expires,Cache
瀏覽器緩存 - Rambing - JavaEye技術(shù)網(wǎng)站
瀏覽器緩存機制詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服