摘要:當(dāng)值設(shè)為時(shí),則代表在這個(gè)請(qǐng)求正確返回時(shí)間瀏覽器也會(huì)記錄下來(lái)的分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存。
網(wǎng)絡(luò)篇—瀏覽器緩存(一) 一、緩存類型
有兩種,強(qiáng)緩存和協(xié)商緩存
強(qiáng)緩存
不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接從緩存中讀取資源;
協(xié)商緩存
向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求的request header的一些參數(shù)來(lái)判斷是否命中協(xié)商緩存,如果命中,則返回304狀態(tài)碼并帶上新的response header通知瀏覽器從緩存中讀取資源;
異同
共同點(diǎn):都是從客戶端緩存中讀取資源;
區(qū)別:強(qiáng)緩存不會(huì)發(fā)請(qǐng)求,協(xié)商緩存會(huì)發(fā)請(qǐng)求;
二、和緩存有關(guān)的header強(qiáng)緩存
Expires:response header里的過(guò)期時(shí)間(絕對(duì)時(shí)間),瀏覽器再次加載資源時(shí),如果在這個(gè)過(guò)期時(shí)間內(nèi),則命中強(qiáng)緩存。expires: Wed, 16 May 2018 13:23:04 GMT;
Cache-Control:當(dāng)值設(shè)為max-age=300時(shí),則代表在這個(gè)請(qǐng)求正確返回時(shí)間(瀏覽器也會(huì)記錄下來(lái))的5分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存。
Expires和Cache-Control的異同:
Expires 是http1.0的產(chǎn)物,設(shè)置的是絕對(duì)日期時(shí)間;
Cache-Control是http1.1的產(chǎn)物,設(shè)置max-age設(shè)置的是相對(duì)時(shí)間;
兩者同時(shí)存在的話,Cache-Control優(yōu)先級(jí)高于Expires
協(xié)商緩存
ETag和If-None-Match
Etag是上一次加載資源時(shí),服務(wù)器返回的response header,是對(duì)該資源的一種唯一標(biāo)識(shí),只要資源有變化,Etag就會(huì)重新生成;
瀏覽器在下一次加載資源向服務(wù)器發(fā)送請(qǐng)求時(shí),會(huì)將上一次返回的Etag值放到request header里的If-None-Match里,服務(wù)器接受到If-None-Match的值后,會(huì)拿來(lái)跟該資源文件的Etag值做比較,如果相同,則表示資源文件沒(méi)有發(fā)生改變,命中協(xié)商緩存。
Last-Modified和If-Modified-Since
Last-Modified是該資源文件最后一次更改時(shí)間,服務(wù)器會(huì)在response header里返回,同時(shí)瀏覽器會(huì)將這個(gè)值保存起來(lái),在下一次發(fā)送請(qǐng)求時(shí),放到request header里的If-Modified-Since里,服務(wù)器在接收到后也會(huì)做比對(duì),如果相同則命中協(xié)商緩存。
兩種協(xié)商緩存的區(qū)別:
精確度上,Etag要優(yōu)于Last-Modified。Last-Modified的時(shí)間單位是秒,如果某個(gè)文件在1秒內(nèi)改變了多次,那么他們的Last-Modified其實(shí)并沒(méi)有體現(xiàn)出來(lái)修改,但是Etag每次都會(huì)改變確保了精度;
在性能上,Etag要遜于Last-Modified,畢竟Last-Modified只需要記錄時(shí)間,而Etag需要服務(wù)器通過(guò)算法來(lái)計(jì)算出一個(gè)hash值;
在優(yōu)先級(jí)上,服務(wù)器校驗(yàn)優(yōu)先考慮Etag。
三、瀏覽器緩存過(guò)程瀏覽器第一次加載資源,服務(wù)器返回200,瀏覽器將資源文件從服務(wù)器上請(qǐng)求下載下來(lái),并把response header及該請(qǐng)求的返回時(shí)間一并緩存;
下一次加載資源時(shí),先比較當(dāng)前時(shí)間和上一次返回200時(shí)的時(shí)間差,如果沒(méi)有超過(guò)cache-control設(shè)置的max-age,則沒(méi)有過(guò)期,命中強(qiáng)緩存,不發(fā)請(qǐng)求直接從本地緩存讀取該文件(如果瀏覽器不支持HTTP1.1,則用expires判斷是否過(guò)期);
如果時(shí)間過(guò)期,則向服務(wù)器發(fā)送header帶有If-None-Match和If-Modified-Since 的請(qǐng)求;
服務(wù)器收到請(qǐng)求后,優(yōu)先根據(jù)Etag的值判斷被請(qǐng)求的文件有沒(méi)有做修改,Etag值一致則沒(méi)有修改,命中協(xié)商緩存,返回304;如果不一致則有改動(dòng),直接返回新的資源文件帶上新的Etag值并返回 200;
如果服務(wù)器收到的請(qǐng)求沒(méi)有Etag值,則將If-Modified-Since和被請(qǐng)求文件的最后修改時(shí)間做比對(duì),一致則命中協(xié)商緩存,返回304;不一致則返回新的last-modified和文件并返回 200;
四、設(shè)置瀏覽器緩存通過(guò)HTML的META設(shè)置expires和cache-control
此方法僅對(duì)該網(wǎng)頁(yè)有效,對(duì)網(wǎng)頁(yè)中的圖片或其他請(qǐng)求無(wú)效。
圖片,css,js,flash的緩存
這些主要通過(guò)服務(wù)器的配置來(lái)實(shí)現(xiàn)這個(gè)技術(shù);
五、用戶行為對(duì)瀏覽器緩存的控制地址欄訪問(wèn),鏈接跳轉(zhuǎn)是正常用戶行為,將會(huì)觸發(fā)瀏覽器緩存機(jī)制;
F5刷新,瀏覽器會(huì)設(shè)置max-age=0,跳過(guò)強(qiáng)緩存判斷,會(huì)進(jìn)行協(xié)商緩存判斷;
ctrl+F5刷新,跳過(guò)強(qiáng)緩存和協(xié)商緩存,直接從服務(wù)器拉取資源
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/52365.html
摘要:當(dāng)值設(shè)為時(shí),則代表在這個(gè)請(qǐng)求正確返回時(shí)間瀏覽器也會(huì)記錄下來(lái)的分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存。 網(wǎng)絡(luò)篇—瀏覽器緩存(一) 一、緩存類型 有兩種,強(qiáng)緩存和協(xié)商緩存 強(qiáng)緩存 不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接從緩存中讀取資源; 協(xié)商緩存 向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求的request header的一些參數(shù)來(lái)判斷是否命中協(xié)商緩存,如果命中,則返回304狀態(tài)碼并帶上新的respon...
摘要:當(dāng)值設(shè)為時(shí),則代表在這個(gè)請(qǐng)求正確返回時(shí)間瀏覽器也會(huì)記錄下來(lái)的分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存。 網(wǎng)絡(luò)篇—瀏覽器緩存(一) 一、緩存類型 有兩種,強(qiáng)緩存和協(xié)商緩存 強(qiáng)緩存 不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接從緩存中讀取資源; 協(xié)商緩存 向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求的request header的一些參數(shù)來(lái)判斷是否命中協(xié)商緩存,如果命中,則返回304狀態(tài)碼并帶上新的respon...
摘要:當(dāng)值設(shè)為時(shí),則代表在這個(gè)請(qǐng)求正確返回時(shí)間瀏覽器也會(huì)記錄下來(lái)的分鐘內(nèi)再次加載資源,就會(huì)命中強(qiáng)緩存。 網(wǎng)絡(luò)篇—瀏覽器緩存(一) 一、緩存類型 有兩種,強(qiáng)緩存和協(xié)商緩存 強(qiáng)緩存 不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接從緩存中讀取資源; 協(xié)商緩存 向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器會(huì)根據(jù)這個(gè)請(qǐng)求的request header的一些參數(shù)來(lái)判斷是否命中協(xié)商緩存,如果命中,則返回304狀態(tài)碼并帶上新的respon...
摘要:在文檔中,可以指定清單文件的相對(duì)路徑和絕對(duì)。具體做法是在中嵌入一個(gè),中的頁(yè)面的標(biāo)簽包含屬性引用文件,里面定義了需要緩存的文件。這比較適合一些頁(yè)面上的應(yīng)用以及靜態(tài)的不經(jīng)常變更的頁(yè)面。其會(huì)緩存載體頁(yè)面也是由于其機(jī)制。 正巧看到在送書(shū),于是乎找了找自己博客上記錄過(guò)的一些東西來(lái)及其無(wú)恥的蹭書(shū)了~~~ 小廣告:更多內(nèi)容可以看我的博客 之前在segmentfault上刷問(wèn)題看到一個(gè)關(guān)于mani...
閱讀 2999·2020-01-08 12:17
閱讀 1994·2019-08-30 15:54
閱讀 1155·2019-08-30 15:52
閱讀 2038·2019-08-29 17:18
閱讀 1050·2019-08-29 15:34
閱讀 2464·2019-08-27 10:58
閱讀 1866·2019-08-26 12:24
閱讀 371·2019-08-23 18:23