摘要:協(xié)議與上述驗(yàn)證協(xié)議最大的不同在于,他可以省略發(fā)送驗(yàn)證請(qǐng)求環(huán)節(jié),不需要服務(wù)器的驗(yàn)證,而直接使用本地緩存。不過,目前大部分服務(wù)器都會(huì)將兩者添加上,因?yàn)橐?guī)定,如果和同時(shí)出現(xiàn)的話,會(huì)默認(rèn)被覆蓋掉。秒表示在這個(gè)時(shí)間范圍內(nèi)緩存是新鮮的無需更新。
Expires/Cache-Contro
Expires/Cache協(xié)議與上述驗(yàn)證協(xié)議最大的不同在于,他可以省略發(fā)送驗(yàn)證請(qǐng)求環(huán)節(jié),不需要服務(wù)器的驗(yàn)證,而直接使用本地緩存。 通常這種方式,適用于,項(xiàng)目穩(wěn)定,版本迭代不多的時(shí)候。
Expires
在服務(wù)器端可以設(shè)置Expires的一個(gè)絕對(duì)時(shí)間。
//Response Headers Expires:Tue, 03 May 2016 09:33:34 GMT
這告訴瀏覽器,在2016.5.3號(hào)之前,可以直接使用該文本的緩存副本。但是,可能會(huì)因?yàn)榉?wù)器和客戶端的GMT時(shí)間不同,會(huì)有一定的bug。 所以,這里只提議在長(zhǎng)時(shí)間緩存的情況下使用。否則,應(yīng)該選擇Cache-Control.
那在服務(wù)器端該怎么設(shè)置呢? 這里以nginx為例:
location ~* .(?:css|js)$ { expires 1d; access_log off; add_header Cache-Control "public"; }
通過expires設(shè)置過期時(shí)間為一天,此時(shí),服務(wù)器會(huì)根據(jù)當(dāng)前的時(shí)間,加上一天.同時(shí)添加Expires和Cache-Control頭部標(biāo)簽。
即,得到的Response Header為:
Expires: Fri, 28 Feb 2014 10:42:09 GMT Cache-Control: max-age=86400 //24*60*60
(HTTP規(guī)定,如果出現(xiàn)max-age和expires,則max-age默認(rèn)覆蓋掉expires)
當(dāng)expires為負(fù)數(shù)表示no-cache,正數(shù)或零表示max-age=time。
如果你不想緩存,可以直接設(shè)置:
expires -1; //永遠(yuǎn)過期,Cache-Control: no-cache
詳細(xì)可以直接參閱:nginx配置
Cache-Control
這應(yīng)該是HTTP1.1為了解決HTTP1.0中expires的時(shí)間差的bug,而新添加的一個(gè)tag. 他的配置項(xiàng)很多,其實(shí)完全都可以取代expires(現(xiàn)在大多數(shù)服務(wù)器都支持). 引用一段原話:
Cache-Control 頭在 HTTP/1.1 規(guī)范中定義,取代了之前用來定義響應(yīng)緩存策略的頭(例如 Expires)。當(dāng)前的所有瀏覽器都支持 Cache-Control,因此,使用它就夠了。
不過,目前大部分服務(wù)器都會(huì)將兩者添加上,因?yàn)镠TTP規(guī)定,如果Cache-Control和expires同時(shí)出現(xiàn)的話,expires會(huì)默認(rèn)被覆蓋掉。
此時(shí),返回的響應(yīng)碼不再是304(文件未改動(dòng)),而是200(資源成功訪問).
當(dāng)前每次發(fā)送請(qǐng)求之前瀏覽器會(huì)檢查緩存系統(tǒng)里,是否有相應(yīng)文件的備份,如果有的話,則直接從本地模仿一個(gè)Response頭
理論知識(shí)鋪墊完畢,我們來take a look. 看看cache-control 有哪些可以配置的屬性(以下屬性都跟在cache-control后)
public: 共有緩存,可被緩存代理服務(wù)器緩存,比如CDN private: 私有緩存,不能被共有緩存代理服務(wù)器緩存,可被用戶的代理緩存如瀏覽器。 max-age=[秒]:表示在這個(gè)時(shí)間范圍內(nèi)緩存是新鮮的無需更新。類似Expires時(shí)間,不過這個(gè)時(shí)間是相對(duì)的,而不是絕對(duì)的。也就是某次請(qǐng)求成功后多少秒內(nèi)緩存是新鮮的。 s-maxage=[秒]:類似max-age, 除了僅應(yīng)用于共享緩存(如代理)。 no-cache:這里不是不緩存的意思,只是每次在使用緩存之前都強(qiáng)制發(fā)送請(qǐng)求給源服務(wù)器進(jìn)行驗(yàn)證,檢查文件該沒改變(其實(shí)這里和ETag/Last區(qū)別不大) no-store:就是禁止緩存,不讓瀏覽器保留緩存副本 must-revalidate:告訴瀏覽器,你這必須再次驗(yàn)證檢查信息是否過期, 返回的代號(hào)就不是200而是304了。 proxy-revalidate:類似must-revalidate,除了只能應(yīng)用于代理緩存。 比如,這里我可以設(shè)置Cache-Control為: //Response Headers Cache-Control:private, max-age=0, must-revalidate
該文件是一個(gè)私有文件,只能被瀏覽器緩存,而不能被代理緩存。max-age標(biāo)識(shí)該緩存立即過期,其實(shí)和no-cache實(shí)際上區(qū)別不大. 然后must-revalidate告訴瀏覽器,你必須給我再驗(yàn)證文件過沒過期,比如接下來可能會(huì)驗(yàn)證Last-Modified或者ETag.如果沒有過期則使用本地緩存.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79145.html
摘要:當(dāng)然,緩存不止這一種,比如在中定義的某些也可以實(shí)現(xiàn)自定義緩存的但,實(shí)際情況是,這些只能在本地文件中使用,如果是服務(wù)器則默認(rèn)被覆蓋。 親,你知道緩存是什么嗎? 其實(shí)緩存就像辦健身卡,我第一次花了699辦了一年的卡之后,接下來的一年我都可以免費(fèi)鍛煉。 在web 中, 我們交的不是錢,而是空間,我們耗費(fèi)一定的空間之后,能夠獲得網(wǎng)頁打開速度質(zhì)的飛躍。 當(dāng)我們第一次訪問一個(gè)頁面時(shí),我們需要交納一...
摘要:當(dāng)然,緩存不止這一種,比如在中定義的某些也可以實(shí)現(xiàn)自定義緩存的但,實(shí)際情況是,這些只能在本地文件中使用,如果是服務(wù)器則默認(rèn)被覆蓋。 親,你知道緩存是什么嗎? 其實(shí)緩存就像辦健身卡,我第一次花了699辦了一年的卡之后,接下來的一年我都可以免費(fèi)鍛煉。 在web 中, 我們交的不是錢,而是空間,我們耗費(fèi)一定的空間之后,能夠獲得網(wǎng)頁打開速度質(zhì)的飛躍。 當(dāng)我們第一次訪問一個(gè)頁面時(shí),我們需要交納一...
摘要:說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。作為一個(gè)前端開發(fā),我們一般不控制緩存,它對(duì)我們來說是透明的。名字解析工欲善其事必先利其器,在分析整個(gè)緩存流程之前,先明確常見的緩存名詞。它是一個(gè)通用頭,能分別在請(qǐng)求報(bào)文和響應(yīng)報(bào)文中使用。 說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。每次看的時(shí)候都覺得自己懂了,但是過兩天又忘了。究其原因,緩存對(duì)前端來說很重要,但是控制權(quán)卻是在瀏...
摘要:說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。作為一個(gè)前端開發(fā),我們一般不控制緩存,它對(duì)我們來說是透明的。名字解析工欲善其事必先利其器,在分析整個(gè)緩存流程之前,先明確常見的緩存名詞。它是一個(gè)通用頭,能分別在請(qǐng)求報(bào)文和響應(yīng)報(bào)文中使用。 說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。每次看的時(shí)候都覺得自己懂了,但是過兩天又忘了。究其原因,緩存對(duì)前端來說很重要,但是控制權(quán)卻是在瀏...
摘要:說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。作為一個(gè)前端開發(fā),我們一般不控制緩存,它對(duì)我們來說是透明的。名字解析工欲善其事必先利其器,在分析整個(gè)緩存流程之前,先明確常見的緩存名詞。它是一個(gè)通用頭,能分別在請(qǐng)求報(bào)文和響應(yīng)報(bào)文中使用。 說起前端緩存,這真是一個(gè)百看百懂,百懂百忘的重災(zāi)區(qū)。每次看的時(shí)候都覺得自己懂了,但是過兩天又忘了。究其原因,緩存對(duì)前端來說很重要,但是控制權(quán)卻是在瀏...
閱讀 1375·2019-08-30 15:55
閱讀 1655·2019-08-26 10:21
閱讀 3447·2019-08-23 18:28
閱讀 3383·2019-08-23 15:38
閱讀 753·2019-08-23 15:24
閱讀 2143·2019-08-23 13:59
閱讀 785·2019-08-23 11:31
閱讀 2875·2019-08-23 10:53