溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

nginx expires控制頁(yè)面緩存的方法

發(fā)布時(shí)間:2022-05-06 10:42:44 來(lái)源:億速云 閱讀:360 作者:zzz 欄目:大數(shù)據(jù)

這篇文章主要講解了“nginx expires控制頁(yè)面緩存的方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“nginx expires控制頁(yè)面緩存的方法”吧!

語(yǔ)法:expires [time|epoch|max|pff]默認(rèn)值:offexpires指令控制http應(yīng)答中的“expires”和“cache-control”header頭部信息,啟動(dòng)控制頁(yè)面緩存的作用time:可以使用正數(shù)或負(fù)數(shù)?!癳xpires”頭標(biāo)的值將通過(guò)當(dāng)前系統(tǒng)時(shí)間加上設(shè)定time值來(lái)設(shè)定。time值還控制"cache-control"的值:負(fù)數(shù)表示no-cache正數(shù)或零表示max-age=time epoch:指定“expires”的值為 1january,1970,00:00:01 gmtmax:指定“expires”的值為31december2037 23:59:59gmt,"cache-control"的值為10年。-1:指定“expires”的值為當(dāng)前服務(wù)器時(shí)間-1s,即永遠(yuǎn)過(guò)期。off:不修改“expires”和"cache-control"的值
expires使用了特定的時(shí)間,并且要求服務(wù)器和客戶端的是中嚴(yán)格同步。
而cache-control是用max-age指令指定組件被緩存多久。
對(duì)于不支持http1.1的瀏覽器,還是需要expires來(lái)控制。所以最好能指定兩個(gè)響應(yīng)頭。但http規(guī)范規(guī)定max-age指令將重寫(xiě)expires頭。

如果不想讓代理或?yàn)g覽器緩存,加no-cache參數(shù)或private參數(shù):
# expires 1d;
add_header cache-control no-cache;
add_header cache-control private;
這樣瀏覽器f5刷新時(shí),返回的依然是200,而不是304.

記錄一個(gè)nginx控制緩存的例子:
       expires 1d;
       add_header cache-control no-cache;
       add_header cache-control private;
       if ( !-e $request_filename) {
       rewrite ^(.*) http://test.zhaopin.com/index.html break;
  #   add_header cache-control no-cache;
  #   add_header cache-control private;
當(dāng)我將add_header寫(xiě)在rewrite之后時(shí),發(fā)現(xiàn)add_header竟然不起作用了。。是因?yàn)閷?xiě)進(jìn)了if里面..


apache的mod_expires模塊使得在使用expires頭時(shí)能像max-age那樣以相對(duì)的方式設(shè)置日期,通過(guò)expiresdefault指令完成。例如:圖片等過(guò)期時(shí)間為請(qǐng)求開(kāi)始的10年之后
<filematch"\.(gif|jpg|js|css)$">
expiresdefault "access plus 10years"
</filematch>
它像響應(yīng)中發(fā)送expires頭和cache-control max-age頭。

expires|etag控制頁(yè)面緩存區(qū)別expires:像上面文章提到的:expires指令控制http應(yīng)答中的“expires”和“cache-control”header頭部信息,啟動(dòng)控制頁(yè)面緩存的作用time:可以使用正數(shù)或負(fù)數(shù)?!癳xpires”頭標(biāo)的值將通過(guò)當(dāng)前系統(tǒng)時(shí)間加上設(shè)定time值來(lái)設(shè)定。time值還控制"cache-control"的值:負(fù)數(shù)表示no-cache正數(shù)或零表示max-age=time epoch:指定“expires”的值為 1january,1970,00:00:01 gmtmax:指定“expires”的值為31december203723:59:59gmt,"cache-control"的值為10年。-1:指定“expires”的值為當(dāng)前服務(wù)器時(shí)間-1s,即永遠(yuǎn)過(guò)期。off:不修改“expires”和"cache-control"的值

expires使用了特定的時(shí)間,并且要求服務(wù)器和客戶端的是中嚴(yán)格同步。
而cache-control是用max-age指令指定組件被緩存多久。
對(duì)于不支持http1.1的瀏覽器,還是需要expires來(lái)控制。所以最好能指定兩個(gè)響應(yīng)頭。但http規(guī)范規(guī)定max-age指令將重寫(xiě)expires頭。一般用于頁(yè)面變化不是很快的時(shí)候,如果緩存過(guò)期了,瀏覽器在重用它之前會(huì)首先確認(rèn)他是否有效,就是一個(gè)“條件get請(qǐng)求”,如果有效,返回304狀態(tài)碼。expires通過(guò)last-modified響應(yīng)頭來(lái)確定。如圖:
第一次訪問(wèn):
請(qǐng)求:
nginx expires控制頁(yè)面緩存的方法

返回:
nginx expires控制頁(yè)面緩存的方法

第二次訪問(wèn):
請(qǐng)求:
nginx expires控制頁(yè)面緩存的方法

返回:
nginx expires控制頁(yè)面緩存的方法

這時(shí)返回的狀態(tài)碼是304,而在請(qǐng)求中比第一次多了if-modified-since頭,和原始服務(wù)器中的last-modified制作比較,所以實(shí)現(xiàn)瀏覽器緩存并判斷是否過(guò)期。
簡(jiǎn)單的說(shuō),last-modified 與if-modified-since 都是用于記錄頁(yè)面最后修改時(shí)間的 http 頭信息,只是last-modified 是由服務(wù)器往客戶端發(fā)送的 http 頭,而 if-modified-since則是由客戶端往服務(wù)器發(fā)送的頭,可以看到,再次請(qǐng)求本地存在的 cache 頁(yè)面時(shí),客戶端會(huì)通過(guò) if-modified-since頭將先前服務(wù)器端發(fā)過(guò)來(lái)的 last-modified最后修改時(shí)間戳發(fā)送回去,這是為了讓服務(wù)器端進(jìn)行驗(yàn)證,通過(guò)這個(gè)時(shí)間戳判斷客戶端的頁(yè)面是否是最新的,如果不是最新的,則返回新的內(nèi)容,如果是最新的,則返回304告訴客戶端其本地cache的頁(yè)面是最新的,于是客戶端就可以直接從本地加載頁(yè)面了,這樣在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)就會(huì)大大減少,同時(shí)也減輕了服務(wù)器的負(fù)擔(dān)。

如果不想讓代理或?yàn)g覽器緩存,加no-cache參數(shù)或private參數(shù):
# expires 1d;
add_header cache-control no-cache;
add_header cache-control private;
nginx expires控制頁(yè)面緩存的方法



etag:實(shí)體標(biāo)簽,是用來(lái)確認(rèn)web服務(wù)器和瀏覽器緩存有效性的一種機(jī)制。原始服務(wù)器使用etag響應(yīng)頭來(lái)指定組件的etag瀏覽器通過(guò)if-none-match頭將etag傳回原始服務(wù)器。如果匹配,返回304
如圖:
第一次訪問(wèn):
請(qǐng)求:
nginx expires控制頁(yè)面緩存的方法

返回:
nginx expires控制頁(yè)面緩存的方法

第二次請(qǐng)求:
nginx expires控制頁(yè)面緩存的方法

返回:
nginx expires控制頁(yè)面緩存的方法

依然返回的狀態(tài)碼是304,而在請(qǐng)求中比第一次多了if-none-match頭。所以實(shí)現(xiàn)瀏覽器緩存。如果這個(gè)值對(duì)不上,則緩存過(guò)期。
etags和if-none-match是一種常用的判斷資源是否改變的方法。類似于last-modified和http-if-modified-since。但是有所不同的是last-modified和http-if-modified-since只判斷資源的最后修改時(shí)間,而etags和if-none-match可以是資源任何的任何屬性。
etags和if-none-match的工作原理是在httpresponse中添加etags信息。當(dāng)客戶端再次請(qǐng)求該資源時(shí),將在httprequest中加入if-none-match信息(etags的值)。如果服務(wù)器驗(yàn)證資源的etags沒(méi)有改變(該資源沒(méi)有改變),將返回一個(gè)304狀態(tài);否則,服務(wù)器將返回200狀態(tài),并返回該資源和新的etags。
iis上的etag格式需要修改。

感謝各位的閱讀,以上就是“nginx expires控制頁(yè)面緩存的方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)nginx expires控制頁(yè)面緩存的方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI