版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、、八、刖言Http緩存機(jī)制作為web性能優(yōu)化的重要手段,對(duì)于從事Web開發(fā)的同學(xué)們來說,應(yīng)該是知識(shí)體系庫(kù)中的一個(gè)基礎(chǔ)環(huán)節(jié),同時(shí)對(duì)于有志成為前端架構(gòu)師的同學(xué)來說是必備的知識(shí)技能。但是對(duì)于很多前端同學(xué)來說,僅僅只是知道瀏覽器會(huì)對(duì)請(qǐng)求的靜態(tài)文件進(jìn)行緩存,但是為什么被緩存,緩存是怎樣生效的,卻并不是很清楚。在此,我會(huì)嘗試用簡(jiǎn)單明了的文字,像大家系統(tǒng)的介紹HTTP緩存機(jī)制,期望對(duì)各位正確的理解前端緩存有所幫助。在介紹HTTP緩存之前,作為知識(shí)鋪墊,先簡(jiǎn)單介紹一下HTTP報(bào)文HTTP報(bào)文就是瀏覽器和服務(wù)器間通信時(shí)發(fā)送及響應(yīng)的數(shù)據(jù)塊。瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),發(fā)送請(qǐng)求(request)報(bào)文;服務(wù)器向?yàn)g覽器返回
2、數(shù)據(jù),返回響應(yīng)(response)報(bào)文。報(bào)文信息主要分為兩部分1包含屬性的首部(header)附加信息(cookie,緩存信息等)與緩存相關(guān)的規(guī)則信息,均包含在header中2包含數(shù)據(jù)的主體部分(body)HTTP請(qǐng)求真正想要傳輸?shù)牟糠志彺嬉?guī)則解析為方便大家理解,我們認(rèn)為瀏覽器存在一個(gè)緩存數(shù)據(jù)庫(kù),用于存儲(chǔ)緩存信息。在客戶端第一次請(qǐng)求數(shù)據(jù)時(shí),此時(shí)緩存數(shù)據(jù)庫(kù)中沒有對(duì)應(yīng)的緩存數(shù)據(jù),需要請(qǐng)求服務(wù)器,服務(wù)器返回后,將數(shù)據(jù)存儲(chǔ)至緩存數(shù)據(jù)庫(kù)中??蛻舳琐挻鏀?shù)據(jù)庫(kù)匪務(wù)器請(qǐng)求數(shù)據(jù).沒有慶存數(shù)站1夂RXTT環(huán).叫11譴求數(shù)堀|.返回壊據(jù)和鰻存規(guī)則將數(shù)據(jù)和緩存規(guī)則存入綏存乘:統(tǒng)J|客戶端韁存數(shù)器庫(kù)服務(wù)器HTTP緩存有
3、多種規(guī)則,根據(jù)是否需要重新向服務(wù)器發(fā)起請(qǐng)求來分類,我將其分為兩大類(強(qiáng)制緩存,對(duì)比緩存)在詳細(xì)介紹這兩種規(guī)則之前,先通過時(shí)序圖的方式,讓大家對(duì)這兩種規(guī)則有個(gè)簡(jiǎn)單了解。已存在緩存數(shù)據(jù)時(shí),僅基于強(qiáng)制緩存,請(qǐng)求數(shù)據(jù)的流程如下罄制坯帝艦則下聶存命中客戶端躍存數(shù)據(jù)庫(kù)誼懸拒.十有疑與鞋捉.且+.失效,晅回?zé)釗e畧戶輪雲(yún)存奴據(jù)庫(kù)舉制愛序規(guī)則下疑存未歯中話求魏捉陵行熱揺失放諸求卻聊返回黴召加諼育規(guī)見特豺捉刈甌左規(guī)川存入埃在菜焼*客戶端爰存數(shù)據(jù)庫(kù)脂芙器對(duì)比貌則下,廩薦帝中疾甌哽存毎據(jù)的標(biāo)丿已存在緩存數(shù)據(jù)時(shí),僅基于對(duì)比緩存,請(qǐng)求數(shù)據(jù)的流程如下企戰(zhàn)脈男鶉登蹄杠也對(duì)應(yīng)戦捋總吉云融一通知冒廠端謖存F炭敲鬲曲存n氓民容戶端
4、I舜萍數(shù)據(jù)陣II取舅器餃蛋睡存戡方此燈說I.遲問谿戡狂叭耳識(shí)rI謚求眼務(wù)黑賢證謖存標(biāo)識(shí)對(duì)宜的敷據(jù)是否矢做卜毛運(yùn)AM新券托H.墅亂xI舷紀(jì)疋爭(zhēng)堿IT7入陽(yáng)即乘統(tǒng)卜客戶潔|聒年數(shù)據(jù)車|甲勢(shì)器對(duì)比理祥覷測(cè)下.運(yùn)祥旅苛中對(duì)緩存機(jī)制不太了解的同學(xué)可能會(huì)問,基于對(duì)比緩存的流程下,不管是否使用緩存,都需要向服務(wù)器發(fā)送請(qǐng)求,那么還用緩存干什么?這個(gè)問題,我們暫且放下,后文在詳細(xì)介紹每種緩存規(guī)則的時(shí)候,會(huì)帶給大家答案。我們可以看到兩類緩存規(guī)則的不同,強(qiáng)制緩存如果生效,不需要再和服務(wù)器發(fā)生交互,而對(duì)比緩存不管是否生效,都需要與服務(wù)端發(fā)生交互。兩類緩存規(guī)則可以同時(shí)存在,強(qiáng)制緩存優(yōu)先級(jí)咼于對(duì)比緩存,也就是說,當(dāng)執(zhí)行強(qiáng)
5、制緩存的規(guī)則時(shí),如果緩存生效,直接使用緩存,不再執(zhí)行對(duì)比緩存規(guī)則。強(qiáng)制緩存從上文我們得知,強(qiáng)制緩存,在緩存數(shù)據(jù)未失效的情況下,可以直接使用緩存數(shù)據(jù),那么瀏覽器是如何判斷緩存數(shù)據(jù)是否失效呢?我們知道,在沒有緩存數(shù)據(jù)的時(shí)候,瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù)時(shí),服務(wù)器會(huì)將數(shù)據(jù)和緩存規(guī)則一并返回,緩存規(guī)則信息包含在響應(yīng)header中。對(duì)于強(qiáng)制緩存來說,響應(yīng)header中會(huì)有兩個(gè)字段來標(biāo)明失效規(guī)則(Expires/Cache-Control)使用chrome的開發(fā)者工具,可以很明顯的看到對(duì)于強(qiáng)制緩存生效時(shí),網(wǎng)絡(luò)請(qǐng)求的情況200200200FilterRegexiHidedataURLAllXHR倒匚炎ImgMed
6、iaFontVlOOTOflmt200000ms2MOOOms40000Cms50000(3SOGOOflms700000its8MOOCnEms2msNameflexibeM.prequine-44531Q0ejsjquery-2.1.l.mm.JsStatus(fromdiskche)(fromdiskcache)(fromdkkccheExpiresExpires的值為服務(wù)端返回的到期時(shí)間,即下一次請(qǐng)求時(shí),請(qǐng)求時(shí)間小于服務(wù)端返回的到期時(shí)間,直接使用緩存數(shù)據(jù)。不過Expires是HTTP1.0的東西,現(xiàn)在默認(rèn)瀏覽器均默認(rèn)使用HTTP11,所以它的作用基本忽略。另一個(gè)問題是,到期時(shí)間是由服務(wù)
7、端生成的,但是客戶端時(shí)間可能跟服務(wù)端時(shí)間有誤差,這就會(huì)導(dǎo)致緩存命中的誤差。所以HTTP1.1的版本,使用Cache-Control替代。Cache-ControlCache-Control是最重要的規(guī)則。常見的取值有private、public、no-cache、maxage,no-store,默認(rèn)為private。private:客戶端可以緩存public:客戶端和代理服務(wù)器都可緩存(前端的同學(xué),可以認(rèn)為public和private是一樣的)max-age=xxx:緩存的內(nèi)容將在xxx秒后失效no-cache:需要使用對(duì)比緩存來驗(yàn)證緩存數(shù)據(jù)(后面介紹)no-store:所有內(nèi)容都不會(huì)緩存,強(qiáng)
8、制緩存,對(duì)比緩存都不會(huì)觸發(fā)(對(duì)于前端開發(fā)來說,緩存越多越好,so基本上和它說886)舉個(gè)板栗ResponseHeadersviewsourceCacIm-Control:max-age=3L5-36G00Connetion:Leep-aliueCqHtent-Encoding:gzipContentType:appliestioj日td匸tri_ptDate:Tue,24Zan2O1732:21:12GMTETag:4J嚴(yán)58&47adf-lied2dLast-Madffied:Sbij22?an2917C9:2&:55GMT圖中Cache-Control僅指定了max-age,所以默認(rèn)為pr
9、ivate,緩存時(shí)間為31536000秒(365天)也就是說,在365天內(nèi)再次請(qǐng)求這條數(shù)據(jù),都會(huì)直接獲取緩存數(shù)據(jù)庫(kù)中的數(shù)據(jù),直接使用。對(duì)比緩存對(duì)比緩存,顧名思義,需要進(jìn)行比較判斷是否可以使用緩存。瀏覽器第一次請(qǐng)求數(shù)據(jù)時(shí),服務(wù)器會(huì)將緩存標(biāo)識(shí)與數(shù)據(jù)一起返回給客戶端,客戶端將二者備份至緩存數(shù)據(jù)庫(kù)中。再次請(qǐng)求數(shù)據(jù)時(shí),客戶端將備份的緩存標(biāo)識(shí)發(fā)送給服務(wù)器,服務(wù)器根據(jù)緩存標(biāo)識(shí)進(jìn)行判斷,判斷成功后,返回304狀態(tài)碼,通知客戶端比較成功,可以使用緩存數(shù)據(jù)。第一次訪問:NameStatusSizeTimeflexible-c207ebf8js2001,3KE_03msj_|匕日汰-5出習(xí)15曲2M228KB斗2與
10、|indeM-6cla96Qb.j&20035.2KB匕l(fā)rm再次訪問:NameStatusSizeTimeflecible-c207ebffi.js304206B28ms304209B66rmindex-GclsS&9b.is304208B37mt通過兩圖的對(duì)比,我們可以很清楚的發(fā)現(xiàn),在對(duì)比緩存生效時(shí),狀態(tài)碼為304,并且報(bào)文大小和請(qǐng)求時(shí)間大大減少。原因是,服務(wù)端在進(jìn)行標(biāo)識(shí)比較后,只返回header部分,通過狀態(tài)碼通知客戶端使用緩存,不再需要將報(bào)文主體部分返回給客戶端。對(duì)于對(duì)比緩存來說,緩存標(biāo)識(shí)的傳遞是我們著重需要理解的,它在請(qǐng)求header和響應(yīng)header間進(jìn)行傳遞,一共分為兩種標(biāo)識(shí)傳遞
11、,接下來,我們分開介紹。Last-Modified/If-Modified-SinceLastModified:服務(wù)器在響應(yīng)請(qǐng)求時(shí),告訴瀏覽器資源的最后修改時(shí)間。TResponseHeadersviewsourceCache-Control:max-age=31536B03第一次請(qǐng)求時(shí),服務(wù)器返回的資源最后修改時(shí)間Connection:keep-aliveContent-Encoding:gzipContent-Type:ppLicatian/jvas匚iptDate:Tue,24Jar201F37:26:54GNTETag:W/,58S6c2Bl-3d9Lafit-Modrfied:TuEj
12、24Jan2017G2:5&:45GM7Server:TGWEETransfer-Encoding:chunkedVary:Accept-Wccidin召IfModifiedSince:再次請(qǐng)求服務(wù)器時(shí),通過此字段通知服務(wù)器上次請(qǐng)求時(shí),服務(wù)器返回的資源最后修改時(shí)間。服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-Modified-Since則與被請(qǐng)求資源的最后修改時(shí)間進(jìn)行比對(duì)。若資源的最后修改時(shí)間大于If-Modified-Since,說明資源又被改動(dòng)過,則響應(yīng)整片資源內(nèi)容,返回狀態(tài)碼200;若資源的最后修改時(shí)間小于或等于If-Modified-Since,說明資源無新修改,則響應(yīng)HTTP304,告知瀏覽器繼續(xù)
13、使用所保存的cache。TRequestHeadersviewsourceAccept:test/htmLapplicatiori/xiitml+xml,appliestion/Kml;q=9.9jimage/w亡bpK/Kq=B舀Accept-EiKoding:gzip,deflatejsdeh再次請(qǐng)求時(shí),瀏覽器通知服務(wù)器卜上次請(qǐng)求時(shí)返回的資源最后修改時(shí)間Accept-Language:h-CN,zh;q=0.8Cache-Control:mx-age=GCorinecti?n:kep-aliweHost:m.SIf-Modified芳inc亡:Tu“24:朗眈:巧:45MTIf-None-
14、Match:W/,5886c23n-3d9Upgrade-Insecure-Requests:JUser-Agent:Mozlll/5.eEtag/If-None-Match(優(yōu)先級(jí)高于Last-Modified/If-Modified-Since)Etag:服務(wù)器響應(yīng)請(qǐng)求時(shí),告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器決定)。于R亡百ponsEHE/d皀踐viewsourceCche-Ccntrd:max-ag&=31536e0aConnection:ke?p-alive第一次靖求吋,服務(wù)器返回的資源唯一標(biāo)識(shí)Content-Enccdin-g:gzipContent-Type:d口
15、plicatiar/.javascriptDate:Tue,24Jar2&1737:26:54GMTETag:W/,5886c232-3d3,Last-Modrfied:Tue24Tan2flJ7&2:55:45GFTTServer:TGWEBTransfer-Encoding:c:hurkedVary:Acce口t-Wncodie習(xí)If-None-Match:再次請(qǐng)求服務(wù)器時(shí),通過此字段通知服務(wù)器客戶段緩存數(shù)據(jù)的唯一標(biāo)識(shí)。服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-None-Match則與被請(qǐng)求資源的唯一標(biāo)識(shí)進(jìn)行比對(duì),不同,說明資源又被改動(dòng)過,則響應(yīng)整片資源內(nèi)容,返回狀態(tài)碼200;相同,說明資源無新修改,
16、則響應(yīng)HTTP304,告知瀏覽器繼續(xù)使用所保存的cache。RequestHeddensview曲口亡Accept:texT/btinlapplicetion/Khtml+xmlappLicLatian/Knil;q=-3.9,image/webps;q=0.SAccept-Encodingi:gzipjcleflat&jsdch再次請(qǐng)求時(shí),瀏覽器通知服務(wù)器上次返回的資源唯一標(biāo)識(shí)Accept-Language:2h-CNfzhiq=6.8Cache-Control:max-ge=0Connection:keep-alLv-eHost;it.S-ltiangQIf-Modified-SiiKe:Tue,24Jan201702:55:45QNTIf-hlone-Match:W/,58B6c231-8d9_Upgrade-Insecure-ReqUKt5:1User-Agent:Mozilla/5總結(jié)對(duì)于強(qiáng)制緩存,服務(wù)器通知瀏覽器一個(gè)緩存時(shí)間,在緩存時(shí)間內(nèi),下次請(qǐng)求,直接用緩存,不在時(shí)間內(nèi),執(zhí)行比較緩存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版危險(xiǎn)品運(yùn)輸車輛駕駛?cè)藛T培訓(xùn)合同3篇
- 二零二五版漫畫版權(quán)保護(hù)與侵權(quán)處理合同4篇
- 二零二五年度區(qū)塊鏈技術(shù)應(yīng)用入股合同4篇
- 2025年度美發(fā)店員工心理健康關(guān)愛與支持合同4篇
- 2024責(zé)任制消防安全與安全生產(chǎn)合同示范3篇
- 二零二五年度綠色出行出租車司機(jī)招聘合同4篇
- 二零二五年度電信企業(yè)員工權(quán)益保障與薪酬激勵(lì)集體合同范本3篇
- 2025年度設(shè)備拆裝搬運(yùn)與安裝調(diào)試合同樣本4篇
- 二零二五年度影視基地租賃合同協(xié)議書4篇
- 二零二五年度體育設(shè)施設(shè)備租賃及賽事運(yùn)營(yíng)合同4篇
- 2024年高考八省聯(lián)考地理適應(yīng)性試卷附答案解析
- 足浴技師與店內(nèi)禁止黃賭毒協(xié)議書范文
- 中國(guó)高血壓防治指南(2024年修訂版)要點(diǎn)解讀
- 2024-2030年中國(guó)光電干擾一體設(shè)備行業(yè)發(fā)展現(xiàn)狀與前景預(yù)測(cè)分析研究報(bào)告
- 湖南省岳陽(yáng)市岳陽(yáng)樓區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題(解析版)
- 農(nóng)村自建房安全合同協(xié)議書
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語(yǔ)言溝通發(fā)展量表(長(zhǎng)表)-詞匯及手勢(shì)(8-16月齡)
評(píng)論
0/150
提交評(píng)論