版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、、八、刖言Http緩存機(jī)制作為web性能優(yōu)化的重要手段,對于從事Web開發(fā)的同學(xué)們來說,應(yīng)該是知識體系庫中的一個(gè)基礎(chǔ)環(huán)節(jié),同時(shí)對于有志成為前端架構(gòu)師的同學(xué)來說是必備的知識技能。但是對于很多前端同學(xué)來說,僅僅只是知道瀏覽器會對請求的靜態(tài)文件進(jìn)行緩存,但是為什么被緩存,緩存是怎樣生效的,卻并不是很清楚。在此,我會嘗試用簡單明了的文字,像大家系統(tǒng)的介紹HTTP緩存機(jī)制,期望對各位正確的理解前端緩存有所幫助。在介紹HTTP緩存之前,作為知識鋪墊,先簡單介紹一下HTTP報(bào)文HTTP報(bào)文就是瀏覽器和服務(wù)器間通信時(shí)發(fā)送及響應(yīng)的數(shù)據(jù)塊。瀏覽器向服務(wù)器請求數(shù)據(jù),發(fā)送請求(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請求真正想要傳輸?shù)牟糠志彺嬉?guī)則解析為方便大家理解,我們認(rèn)為瀏覽器存在一個(gè)緩存數(shù)據(jù)庫,用于存儲緩存信息。在客戶端第一次請求數(shù)據(jù)時(shí),此時(shí)緩存數(shù)據(jù)庫中沒有對應(yīng)的緩存數(shù)據(jù),需要請求服務(wù)器,服務(wù)器返回后,將數(shù)據(jù)存儲至緩存數(shù)據(jù)庫中??蛻舳琐挻鏀?shù)據(jù)庫匪務(wù)器請求數(shù)據(jù).沒有慶存數(shù)站1夂RXTT環(huán).叫11譴求數(shù)堀|.返回壊據(jù)和鰻存規(guī)則將數(shù)據(jù)和緩存規(guī)則存入綏存乘:統(tǒng)J|客戶端韁存數(shù)器庫服務(wù)器HTTP緩存有
3、多種規(guī)則,根據(jù)是否需要重新向服務(wù)器發(fā)起請求來分類,我將其分為兩大類(強(qiáng)制緩存,對比緩存)在詳細(xì)介紹這兩種規(guī)則之前,先通過時(shí)序圖的方式,讓大家對這兩種規(guī)則有個(gè)簡單了解。已存在緩存數(shù)據(jù)時(shí),僅基于強(qiáng)制緩存,請求數(shù)據(jù)的流程如下罄制坯帝艦則下聶存命中客戶端躍存數(shù)據(jù)庫誼懸拒.十有疑與鞋捉.且+.失效,晅回?zé)釗e畧戶輪雲(yún)存奴據(jù)庫舉制愛序規(guī)則下疑存未歯中話求魏捉陵行熱揺失放諸求卻聊返回黴召加諼育規(guī)見特豺捉刈甌左規(guī)川存入埃在菜焼*客戶端爰存數(shù)據(jù)庫脂芙器對比貌則下,廩薦帝中疾甌哽存毎據(jù)的標(biāo)丿已存在緩存數(shù)據(jù)時(shí),僅基于對比緩存,請求數(shù)據(jù)的流程如下企戰(zhàn)脈男鶉登蹄杠也對應(yīng)戦捋總吉云融一通知冒廠端謖存F炭敲鬲曲存n氓民容戶端
4、I舜萍數(shù)據(jù)陣II取舅器餃蛋睡存戡方此燈說I.遲問谿戡狂叭耳識rI謚求眼務(wù)黑賢證謖存標(biāo)識對宜的敷據(jù)是否矢做卜毛運(yùn)AM新券托H.墅亂xI舷紀(jì)疋爭堿IT7入陽即乘統(tǒng)卜客戶潔|聒年數(shù)據(jù)車|甲勢器對比理祥覷測下.運(yùn)祥旅苛中對緩存機(jī)制不太了解的同學(xué)可能會問,基于對比緩存的流程下,不管是否使用緩存,都需要向服務(wù)器發(fā)送請求,那么還用緩存干什么?這個(gè)問題,我們暫且放下,后文在詳細(xì)介紹每種緩存規(guī)則的時(shí)候,會帶給大家答案。我們可以看到兩類緩存規(guī)則的不同,強(qiáng)制緩存如果生效,不需要再和服務(wù)器發(fā)生交互,而對比緩存不管是否生效,都需要與服務(wù)端發(fā)生交互。兩類緩存規(guī)則可以同時(shí)存在,強(qiáng)制緩存優(yōu)先級咼于對比緩存,也就是說,當(dāng)執(zhí)行強(qiáng)
5、制緩存的規(guī)則時(shí),如果緩存生效,直接使用緩存,不再執(zhí)行對比緩存規(guī)則。強(qiáng)制緩存從上文我們得知,強(qiáng)制緩存,在緩存數(shù)據(jù)未失效的情況下,可以直接使用緩存數(shù)據(jù),那么瀏覽器是如何判斷緩存數(shù)據(jù)是否失效呢?我們知道,在沒有緩存數(shù)據(jù)的時(shí)候,瀏覽器向服務(wù)器請求數(shù)據(jù)時(shí),服務(wù)器會將數(shù)據(jù)和緩存規(guī)則一并返回,緩存規(guī)則信息包含在響應(yīng)header中。對于強(qiáng)制緩存來說,響應(yīng)header中會有兩個(gè)字段來標(biāo)明失效規(guī)則(Expires/Cache-Control)使用chrome的開發(fā)者工具,可以很明顯的看到對于強(qiáng)制緩存生效時(shí),網(wǎng)絡(luò)請求的情況200200200FilterRegexiHidedataURLAllXHR倒匚炎ImgMed
6、iaFontVlOOTOflmt200000ms2MOOOms40000Cms50000(3SOGOOflms700000its8MOOCnEms2msNameflexibeM.prequine-44531Q0ejsjquery-2.1.l.mm.JsStatus(fromdiskche)(fromdiskcache)(fromdkkccheExpiresExpires的值為服務(wù)端返回的到期時(shí)間,即下一次請求時(shí),請求時(shí)間小于服務(wù)端返回的到期時(shí)間,直接使用緩存數(shù)據(jù)。不過Expires是HTTP1.0的東西,現(xiàn)在默認(rèn)瀏覽器均默認(rèn)使用HTTP11,所以它的作用基本忽略。另一個(gè)問題是,到期時(shí)間是由服務(wù)
7、端生成的,但是客戶端時(shí)間可能跟服務(wù)端時(shí)間有誤差,這就會導(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:需要使用對比緩存來驗(yàn)證緩存數(shù)據(jù)(后面介紹)no-store:所有內(nèi)容都不會緩存,強(qiáng)
8、制緩存,對比緩存都不會觸發(fā)(對于前端開發(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)再次請求這條數(shù)據(jù),都會直接獲取緩存數(shù)據(jù)庫中的數(shù)據(jù),直接使用。對比緩存對比緩存,顧名思義,需要進(jìn)行比較判斷是否可以使用緩存。瀏覽器第一次請求數(shù)據(jù)時(shí),服務(wù)器會將緩存標(biāo)識與數(shù)據(jù)一起返回給客戶端,客戶端將二者備份至緩存數(shù)據(jù)庫中。再次請求數(shù)據(jù)時(shí),客戶端將備份的緩存標(biāo)識發(fā)送給服務(wù)器,服務(wù)器根據(jù)緩存標(biāo)識進(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通過兩圖的對比,我們可以很清楚的發(fā)現(xiàn),在對比緩存生效時(shí),狀態(tài)碼為304,并且報(bào)文大小和請求時(shí)間大大減少。原因是,服務(wù)端在進(jìn)行標(biāo)識比較后,只返回header部分,通過狀態(tài)碼通知客戶端使用緩存,不再需要將報(bào)文主體部分返回給客戶端。對于對比緩存來說,緩存標(biāo)識的傳遞是我們著重需要理解的,它在請求header和響應(yīng)header間進(jìn)行傳遞,一共分為兩種標(biāo)識傳遞
11、,接下來,我們分開介紹。Last-Modified/If-Modified-SinceLastModified:服務(wù)器在響應(yīng)請求時(shí),告訴瀏覽器資源的最后修改時(shí)間。TResponseHeadersviewsourceCache-Control:max-age=31536B03第一次請求時(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:再次請求服務(wù)器時(shí),通過此字段通知服務(wù)器上次請求時(shí),服務(wù)器返回的資源最后修改時(shí)間。服務(wù)器收到請求后發(fā)現(xiàn)有頭If-Modified-Since則與被請求資源的最后修改時(shí)間進(jìn)行比對。若資源的最后修改時(shí)間大于If-Modified-Since,說明資源又被改動過,則響應(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再次請求時(shí),瀏覽器通知服務(wù)器卜上次請求時(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)先級高于Last-Modified/If-Modified-Since)Etag:服務(wù)器響應(yīng)請求時(shí),告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識(生成規(guī)則由服務(wù)器決定)。于R亡百ponsEHE/d皀踐viewsourceCche-Ccntrd:max-ag&=31536e0aConnection:ke?p-alive第一次靖求吋,服務(wù)器返回的資源唯一標(biāo)識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:再次請求服務(wù)器時(shí),通過此字段通知服務(wù)器客戶段緩存數(shù)據(jù)的唯一標(biāo)識。服務(wù)器收到請求后發(fā)現(xiàn)有頭If-None-Match則與被請求資源的唯一標(biāo)識進(jìn)行比對,不同,說明資源又被改動過,則響應(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再次請求時(shí),瀏覽器通知服務(wù)器上次返回的資源唯一標(biāo)識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é)對于強(qiáng)制緩存,服務(wù)器通知瀏覽器一個(gè)緩存時(shí)間,在緩存時(shí)間內(nèi),下次請求,直接用緩存,不在時(shí)間內(nèi),執(zhí)行比較緩存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年工業(yè)設(shè)備安裝協(xié)議
- 2024年全屋門窗定制及安裝服務(wù)協(xié)議
- 2024年企業(yè)標(biāo)志設(shè)計(jì)轉(zhuǎn)讓合同
- 2024年太陽能路燈產(chǎn)品研發(fā)與技術(shù)轉(zhuǎn)讓合同
- 2024年城市供水供電與維護(hù)協(xié)議
- 2024年城市基礎(chǔ)設(shè)施建設(shè)承包合同
- 2023年中國人民大學(xué)物業(yè)管理中心招聘考試真題
- 2023年四川省作家協(xié)會所屬事業(yè)單位考核招聘考試真題
- 2024年衛(wèi)星導(dǎo)航系統(tǒng)應(yīng)用研發(fā)合同
- 2024年工程混凝土原材料采購合同
- 2024年新人教版七年級上冊數(shù)學(xué)教學(xué)課件 第三章 代數(shù)式 數(shù)學(xué)活動
- 九年級物理全冊教案【人教版】
- 《中華民族一家親-同心共筑中國夢》隊(duì)會課件
- 國家開放大學(xué)《管理信息系統(tǒng)》大作業(yè)參考答案
- Unit 4 Time to celebrate 大單元教學(xué)設(shè)計(jì) 2024-2025學(xué)年外研版英語七年級上冊
- 二十屆三中全會精神應(yīng)知應(yīng)會知識測試30題(附答案)
- 【A公司企業(yè)文化建設(shè)問題及優(yōu)化建議開題報(bào)告3400字】
- 2.2.1 有理數(shù)的乘法(第一課時(shí))-教案
- 中煤電力有限公司招聘筆試題庫2024
- 輕量化材料在航空航天領(lǐng)域的應(yīng)用
- 《計(jì)算機(jī)視覺-基于OpenCV的圖像處理》全套教學(xué)課件
評論
0/150
提交評論