緩存的目的:
重用已獲取的資源能夠有效的提升網(wǎng)站與應(yīng)用的性能。Web 緩存能夠減少延遲與網(wǎng)絡(luò)阻塞,進而減少顯示某個資源所用的時間。借助 HTTP 緩存榛瓮,Web 站點變得更具有響應(yīng)性。
緩存是一種保存資源副本并在下次請求時直接使用該副本的技術(shù)巫击。當 web 緩存發(fā)現(xiàn)請求的資源已經(jīng)被存儲禀晓,它會攔截請求,返回該資源的拷貝坝锰,而不會去源服務(wù)器重新下載粹懒。這樣帶來的好處有:緩解服務(wù)器端壓力,提升性能(獲取資源的耗時更短了)顷级。對于網(wǎng)站來說凫乖,緩存是達到高性能的重要組成部分。緩存需要合理配置弓颈,因為并不是所有資源都是永久不變的:重要的是對一個資源的緩存應(yīng)截止到其下一次發(fā)生改變(即不能緩存過期的資源)帽芽。
Cache-Control:
Cache-Control: no-store
緩存中不得存儲任何關(guān)于客戶端請求和服務(wù)端響應(yīng)的內(nèi)容。每次由客戶端發(fā)起的請求都會下載完整的響應(yīng)內(nèi)容翔冀。
Cache-Control: no-cache
此方式下导街,每次有請求發(fā)出時,緩存會將此請求發(fā)到服務(wù)器(譯者注:該請求應(yīng)該會帶有與本地緩存相關(guān)的驗證字段)纤子,服務(wù)器端會驗證請求中所描述的緩存是否過期搬瑰,若未過期(注:實際就是返回304),則緩存才使用本地緩存副本计福。
Cache-Control: max-age=31536000
過期機制中跌捆,最重要的指令是?"max-age=<seconds>"徽职,表示資源能夠被緩存(保持新鮮)的最大時間象颖。相對Expires而言,max-age是距離請求發(fā)起的時間的秒數(shù)姆钉。針對應(yīng)用中那些不會改變的文件说订,通常可以手動設(shè)置一定的時長以保證緩存有效潮瓶,例如圖片陶冷、css、js等靜態(tài)資源毯辅。
ETag:
該響應(yīng)頭是資源的特定版本的標識符埂伦。這可以讓緩存更高效,并節(jié)省帶寬思恐,因為如果內(nèi)容沒有改變沾谜,Web服務(wù)器不需要發(fā)送完整的響應(yīng)膊毁。
一般配合MD5使用,MD5是消息摘要算法基跑,一種被廣泛使用的密碼散列函數(shù)婚温,可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致媳否。
語法:ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
服務(wù)器將客戶端的ETag(作為If-None-Match字段的值一起發(fā)送)與其當前版本的資源的ETag進行比較栅螟,如果兩個值匹配(即資源未更改),服務(wù)器將返回不帶任何內(nèi)容的304未修改狀態(tài)篱竭,告訴客戶端緩存版本可用(新鮮)力图,請求響應(yīng)報文如下:
Cache-Control:緩存 與 ETag 的「緩存」有什么區(qū)別?
Cache-Control: max-age=1000 :請求完成掺逼,響應(yīng)完畢后搪哪,響應(yīng)體保存一百秒,時間一到緩存就沒有啦坪圾,需要從新請求服務(wù)器晓折,去拿對應(yīng)的數(shù)據(jù)。100秒期間兽泄,瀏覽器不會再次發(fā)送任何請求漓概,只在本地緩存拿數(shù)據(jù)。
ETag:對比本地與服務(wù)器端的MD5返回值病梢,若一致胃珍,不需要重新加載響應(yīng)體,若不一致(說明文本發(fā)生了改變)則重新下載響應(yīng)體蜓陌。當數(shù)據(jù)沒發(fā)生改變的時候觅彰,每次請求雖然不會重新加載響應(yīng)體,但是還是發(fā)送了請求钮热。
如果資源沒過期填抬,前者根本不會發(fā)送請求,后者會發(fā)送請求隧期。
PS:
①飒责,作為入口,html是不能做緩存的仆潮,html有很多url宏蛉,如果緩存的話,JS性置,CSS等發(fā)生更新變化拾并,用戶不能第一時間獲取最新的版本。
②,如果緩存內(nèi)容在設(shè)置的過期時間內(nèi)發(fā)生變動嗅义,需要更改請求路徑个榕,當路徑發(fā)生改變,瀏覽器就會重新求情芥喇。