我們經(jīng)常說這個頁面有緩存~!這個Css有緩存~!我們?nèi)绻蜷_控制臺,也經(jīng)??吹接袀€叫做Cache-Control的字段,但是這個字段里有很多種類的值,有很多同學(xué)不明白這些值都是什么意思~
這些值不但在實際中會經(jīng)常用到,而且在面試中也會經(jīng)常被提起,那么今天渡一教育就帶大家一起看一下這些值的含義吧~

其實cache-control里的字段分為兩類,一類是RequestHeader中使用的,另一類是ResponseHeader中使用的,我們最常見的或者說和前端最相關(guān)的就是ResponseHeader中使用的cache-control。
我們今天來用鄧哥吃藥的例子,來為大家解釋ResponseHeader中的Cache-Control的各種值~
鄧哥的近況可以用一句話來形容,那就是“浪多人變傻”。有一天鄧哥忽然發(fā)現(xiàn)自己的腦子不夠用了。于是決定買點藥,不能讓這種情況進一步惡化下去~
于是鄧哥去了藥店,藥店的醫(yī)生見了鄧哥,頓時大喜道:“呀~!鄧哥來啦~!今天想吃點啥?”鄧哥向藥店醫(yī)生描述了自己的情況之后,藥店的醫(yī)生推薦給鄧哥本店的招牌【腦殘片】。我們的故事就是從這開始的~
這時我們可以把鄧哥比作瀏覽器,藥店比作服務(wù)器,藥店醫(yī)生比作服務(wù)器的代理,腦殘片就是要請求的資源,比如一個圖片之類的~
1.max-age:
鄧哥有個怪癖,買回來超過七天就不吃了,就得買新的。(就算沒過期也不吃了~如果過期那更不吃了~)
這就是max-age的作用,緩存的資源,超過一定時間就不要了,就要重新請求。如果買回來的時間是1號,腦殘片的過期時間是5號,雖然鄧哥能接受藥在自己家放7天,但是因為5號就過期了,所以鄧哥5號之后還是要重新去買的。max-age后面通常跟著一串數(shù)字,表示緩存的秒數(shù)。
2.max-stale:
有時鄧哥也是很節(jié)儉的,有的東西過期幾天也是會吃的。
這就是max-stale的作用,過期一點時間無所謂,也能用。max-stale后面也跟著秒數(shù),表示過期多長時間的東西也可以繼續(xù)使用。
max-stale多數(shù)的時候會跟著max-age一起使用。如果腦殘片是1號買的,鄧哥最多保留7天(到7號),但是腦殘片5號過期,如果max-stale=4的話,就意味著鄧哥可以接受過期4天之內(nèi)的腦殘片。
也就是相當于鄧哥認為腦殘片9號之后才不能吃。但是鄧哥最多只能容忍藥放在家里7天,所以8號的時候鄧哥會去重新買藥(重新請求資源)。
3.no-cache
鄧哥有時候謹慎起來也是很抽風(fēng)的,每次吃藥之前都要先去藥店,讓醫(yī)生看一下藥還能不能吃。萬一哪批藥有問題被召回了呢~(Ps:你懂的)
這就是no-cache的作用,no-cache不會直接使用緩存,而是每次使用資源之前,都要先向服務(wù)器詢問一下這個資源還能不能用,如果能用就繼續(xù)用,如果不能用就重新請求。
4.no-store
有時候鄧哥也是很土豪的,每次吃藥都要新買一瓶。每次都吃新的。(最早的時候,鄧哥的手機也是,每次沒電都買個新的,后來才知道手機居然可以充電。。。)
這就是很no-store,很土豪的做法,每次都要向服務(wù)器請求資源。如果所有的資源都這樣會對服務(wù)器造成很大的壓力,所以我們對于那種對數(shù)據(jù)時效很敏感的數(shù)據(jù),才會做這樣的操作。
5.public
鄧哥家里有好多腦殘片,由于鄧哥經(jīng)常去買腦殘片,所以一進藥店醫(yī)生就會開玩笑道:“又來買腦殘片啦?”
public表示緩存可以被任何地方緩存,藥店是服務(wù)器,醫(yī)生相當于是代理服務(wù)器,藥店的醫(yī)生都能知道鄧哥要買腦殘片,證明代理服務(wù)器已經(jīng)緩存了鄧哥要買的東西。所以public表示任何地方都可以緩存資源。
6.private
有的醫(yī)生也是很嚴肅的,不會每次都和鄧哥開玩笑。所以有的時候鄧哥去藥店,醫(yī)生會很有禮貌并面帶微笑的問鄧哥:“今天想買什么~?”
private的意思就是只指允許客戶端進行緩存,代理服務(wù)器不能緩存這個資源。
7.must-revalidation
有的時候,鄧哥比較忙,鄧嫂也會給鄧哥備著點藥。當鄧嫂手里的藥過期的時候,鄧嫂也會去藥店買藥。
鄧哥和鄧嫂相當于同一個瀏覽器中的兩個窗口。max-age和must-revalidation都是本地過期之后去服務(wù)器端重新請求資源。但是區(qū)別在于,如果用max-age,那么如果資源沒過期,新開的窗口也會使用這個資源。如果是must-revalidation,每次新打開窗口,都會向服務(wù)器去請求資源。
8.no-transform
鄧哥的腦殘片是進口的,標簽上都是英文,有時藥店醫(yī)生擔心病人不認識藥瓶上的字,會把字翻譯過來寫在標簽上,然后貼上去。但是如果生產(chǎn)廠家要求,不能在中途對資源做任何修改操作,藥店醫(yī)生就不會給藥瓶貼標簽了~。
通常當傳輸圖片或者資源時,有時代理服務(wù)器為了有更好的性能,會對圖片或者資源進行壓縮,或者格式的轉(zhuǎn)換。但是如果在響應(yīng)頭中帶有這個字段,就表示這不允許在傳輸?shù)闹型緦Y源做任何修改。
除了以上這些參數(shù)的作用會被經(jīng)常問到之外,還會經(jīng)常問到瀏覽器對于這些參數(shù)的相關(guān)響應(yīng),不同的參數(shù)加上不同的操作會產(chǎn)生不同的動作。我們可以通過下面的表格看到具體會發(fā)生什么動作。

以上故事內(nèi)容純屬虛構(gòu),感謝鄧哥對《鄧哥奇遇記》系列的大力支持。最后對鄧哥補充一句:“藥不能停~!”