免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【W(wǎng)eb緩存機(jī)制概述】2 – Web瀏覽器的緩存機(jī)制

【W(wǎng)eb緩存機(jī)制概述】2 – Web瀏覽器的緩存機(jī)制

====索引=====

【W(wǎng)eb緩存機(jī)制概述】1 – Web緩存的作用與類型

【W(wǎng)eb緩存機(jī)制概述】2 – Web瀏覽器的緩存機(jī)制

【W(wǎng)eb緩存機(jī)制概述】3 – 如何構(gòu)建可緩存站點(diǎn)

【W(wǎng)eb緩存機(jī)制概述】4 – HTML5時(shí)代的Web緩存機(jī)制

【W(wǎng)eb緩存機(jī)制概述】5 – Web App時(shí)代的緩存機(jī)制新思路

============

Web緩存的工作原理

所有的緩存都是基于一套規(guī)則來幫助他們決定什么時(shí)候使用緩存中的副本提供服務(wù)(假設(shè)有副本可用的情況下,未被銷毀回收或者未被刪除修改)。這些規(guī)則有的在協(xié)議中有定義(如HTTP協(xié)議1.0和1.1),有的則是由緩存的管理員設(shè)置(如DBA、瀏覽器的用戶、代理服務(wù)器管理員或者應(yīng)用開發(fā)者)。

瀏覽器端的緩存規(guī)則

對(duì)于瀏覽器端的緩存來講,這些規(guī)則是在HTTP協(xié)議頭和HTML頁面的Meta標(biāo)簽中定義的。他們分別從新鮮度校驗(yàn)值兩個(gè)維度來規(guī)定瀏覽器是否可以直接使用緩存中的副本,還是需要去源服務(wù)器獲取更新的版本。

新鮮度(過期機(jī)制):也就是緩存副本有效期。一個(gè)緩存副本必須滿足以下條件,瀏覽器會(huì)認(rèn)為它是有效的,足夠新的:

  1. 含有完整的過期時(shí)間控制頭信息(HTTP協(xié)議報(bào)頭),并且仍在有效期內(nèi);
  2. 瀏覽器已經(jīng)使用過這個(gè)緩存副本,并且在一個(gè)會(huì)話中已經(jīng)檢查過新鮮度;

滿足以上兩個(gè)情況的一種,瀏覽器會(huì)直接從緩存中獲取副本并渲染。

校驗(yàn)值(驗(yàn)證機(jī)制):服務(wù)器返回資源的時(shí)候有時(shí)在控制頭信息帶上這個(gè)資源的實(shí)體標(biāo)簽Etag(Entity Tag),它可以用來作為瀏覽器再次請(qǐng)求過程的校驗(yàn)標(biāo)識(shí)。如過發(fā)現(xiàn)校驗(yàn)標(biāo)識(shí)不匹配,說明資源已經(jīng)被修改或過期,瀏覽器需求重新獲取資源內(nèi)容。

瀏覽器緩存的控制

使用HTML Meta 標(biāo)簽

Web開發(fā)者可以在HTML頁面的<head>節(jié)點(diǎn)中加入<meta>標(biāo)簽,代碼如下:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

上述代碼的作用是告訴瀏覽器當(dāng)前頁面不被緩存,每次訪問都需要去服務(wù)器拉取。使用上很簡單,但只有部分瀏覽器可以支持,而且所有緩存代理服務(wù)器都不支持,因?yàn)榇聿唤馕鯤TML內(nèi)容本身。

可以通過這個(gè)頁面測試你的瀏覽器是否支持:Pragma No-Cache Test 。

使用緩存有關(guān)的HTTP消息報(bào)頭

一個(gè)URI的完整HTTP協(xié)議交互過程是由HTTP請(qǐng)求和HTTP響應(yīng)組成的。有關(guān)HTTP詳細(xì)內(nèi)容可參考《Hypertext Transfer Protocol — HTTP/1.1》、《HTTP協(xié)議詳解》等。

在HTTP請(qǐng)求和響應(yīng)的消息報(bào)頭中,常見的與緩存有關(guān)的消息報(bào)頭有:

 

Cache-Control與Expires

Cache-Control與Expires的作用一致,都是指明當(dāng)前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請(qǐng)求到服務(wù)器取數(shù)據(jù)。只不過Cache-Control的選擇更多,設(shè)置更細(xì)致,如果同時(shí)設(shè)置的話,其優(yōu)先級(jí)高于Expires

Last-Modified/ETag與Cache-Control/Expires

配置Last-Modified/ETag的情況下,瀏覽器再次訪問統(tǒng)一URI的資源,還是會(huì)發(fā)送請(qǐng)求到服務(wù)器詢問文件是否已經(jīng)修改,如果沒有,服務(wù)器會(huì)只發(fā)送一個(gè)304回給瀏覽器,告訴瀏覽器直接從自己本地的緩存取數(shù)據(jù);如果修改過那就整個(gè)數(shù)據(jù)重新發(fā)給瀏覽器;

Cache-Control/Expires則不同,如果檢測到本地的緩存還是有效的時(shí)間范圍內(nèi),瀏覽器直接使用本地副本,不會(huì)發(fā)送任何請(qǐng)求。兩者一起使用時(shí),Cache-Control/Expires的優(yōu)先級(jí)要高于Last-Modified/ETag。即當(dāng)本地副本根據(jù)Cache-Control/Expires發(fā)現(xiàn)還在有效期內(nèi)時(shí),則不會(huì)再次發(fā)送請(qǐng)求去服務(wù)器詢問修改時(shí)間(Last-Modified)或?qū)嶓w標(biāo)識(shí)(Etag)了。

一般情況下,使用Cache-Control/Expires會(huì)配合Last-Modified/ETag一起使用,因?yàn)榧词狗?wù)器設(shè)置緩存時(shí)間, 當(dāng)用戶點(diǎn)擊“刷新”按鈕時(shí),瀏覽器會(huì)忽略緩存繼續(xù)向服務(wù)器發(fā)送請(qǐng)求,這時(shí)Last-Modified/ETag將能夠很好利用304,從而減少響應(yīng)開銷。

Last-Modified與ETag

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

  1. Last-Modified標(biāo)注的最后修改只能精確到秒級(jí),如果某些文件在1秒鐘以內(nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的新鮮度
  2. 如果某些文件會(huì)被定期生成,當(dāng)有時(shí)內(nèi)容并沒有任何變化,但Last-Modified卻改變了,導(dǎo)致文件沒法使用緩存
  3. 有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時(shí)間,或者與代理服務(wù)器時(shí)間不一致等情形

Etag是服務(wù)器自動(dòng)生成或者由開發(fā)者生成的對(duì)應(yīng)資源在服務(wù)器端的唯一標(biāo)識(shí)符,能夠更加準(zhǔn)確的控制緩存。Last-Modified與ETag是可以一起使用的,服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag,一致的情況下,才會(huì)繼續(xù)比對(duì)Last-Modified,最后才決定是否返回304。Etag的服務(wù)器生成規(guī)則和強(qiáng)弱Etag的相關(guān)內(nèi)容可以參考,《互動(dòng)百科-Etag》和《HTTP Header definition》,這里不再深入。

用戶操作行為與緩存

用戶在使用瀏覽器的時(shí)候,會(huì)有各種操作,比如輸入地址后回車,按F5刷新等,這些行為會(huì)對(duì)緩存有什么影響呢?

通過上表我們可以看到,當(dāng)用戶在按F5進(jìn)行刷新的時(shí)候,會(huì)忽略Expires/Cache-Control的設(shè)置,會(huì)再次發(fā)送請(qǐng)求去服務(wù)器請(qǐng)求,而Last-Modified/Etag還是有效的,服務(wù)器會(huì)根據(jù)情況判斷返回304還是200;而當(dāng)用戶使用Ctrl+F5進(jìn)行強(qiáng)制刷新的時(shí)候,只是所有的緩存機(jī)制都將失效,重新從服務(wù)器拉去資源。

相關(guān)有趣的分享:

瀏覽器緩存機(jī)制》:不同瀏覽器對(duì)用戶操作行為處理比較

HTTP 304客戶端緩存優(yōu)化的神奇作用和用法》:強(qiáng)行在代碼層面比對(duì)文件的Last-Modified時(shí)間,保證用戶使用Ctrl+F5進(jìn)行刷新的時(shí)候也能正常返回304

 

哪些請(qǐng)求不能被緩存?

無法被瀏覽器緩存的請(qǐng)求:

  1. HTTP信息頭中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0等告訴瀏覽器不用緩存的請(qǐng)求
  2. 需要根據(jù)Cookie,認(rèn)證信息等決定輸入內(nèi)容的動(dòng)態(tài)請(qǐng)求是不能被緩存的
  3. 經(jīng)過HTTPS安全加密的請(qǐng)求(有人也經(jīng)過測試發(fā)現(xiàn),ie其實(shí)在頭部加入Cache-Control:max-age信息,firefox在頭部加入Cache-Control:Public之后,能夠?qū)TTPS的資源進(jìn)行緩存,參考《HTTPS的七個(gè)誤解》)
  4. POST請(qǐng)求無法被緩存
  5. HTTP響應(yīng)頭中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的請(qǐng)求無法被緩存
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
服務(wù)器網(wǎng)頁緩存的深入分析
Http頭介紹:Expires,Cache
瀏覽器緩存 - Rambing - JavaEye技術(shù)網(wǎng)站
瀏覽器緩存機(jī)制詳解
什么是HTTP緩存機(jī)制
瀏覽器緩存機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服