Cache-Control字段值詳解

前端小夥伴們,不少時候會在工做中或者面試中碰見Cache-Control這個字段帶來的功能,好比有時候會在面試中怎麼實現強制緩存之類的。不要怕今天我們就看看Cache-Control的神祕之處。前端

單單一個通用的首部字段Cache-Control的值就有十幾種,其中包含了請求首部可攜帶的和響應首部攜帶的。面試

我們先看看請求首部Cache-Control的值緩存

一、no-cache服務器

當客戶端請求時攜帶這個首部字段的時候,經過中間的緩存服務器時,會不去拿緩存資源,而是讓中間服務器轉發給資源服務器,資源服務器看看一下這個資源過時沒有,若是沒有就會告知中間服務器,可使用緩存資源。不然資源服務器就會直接返回新的資源。網絡

二、no-store設計

這個字段很是有意思,就是告知服務器或者客戶端以及中間服務器,我請求或者響應的內容裏面有機密信息,這些響應的內容是永遠不會獲得響應的。代理

三、max-agecode

max-age指令標示了客戶端不肯意接收一個age大於設定時間的響應,這個字段表達是最大緩存時長,請求中單單添加這個字段,實現不了緩存時長,必須結合響應的max-age。一會,會在響應中的max-age 詳細說明orm

四、max-stale token

這個指令表達的是緩存時長過時之後,還能夠有效。好比如今max-age:60秒,那麼max-stale:60秒,如今的緩存時長就是120秒,

五、min-fresh

設定可以容忍的最小新鮮度(緩存時長)min-fresh標示了客戶端不肯意接受新鮮度很少於當前的age加上min-fresh設定的時間之和的響應。

六、no-transfrom

使用 no-transform 指令規定不管是在請求仍是響應中,緩存都不能改 變實體主體的媒體類型。

七、only-if-cache

使用 only-if-cached 指令表示客戶端僅在緩存服務器本地緩存目標資源的狀況下,纔會要求其返回。換言之,該指令要求緩存服務器不從新加載響應,也不會再次確認資源有效性。若發生請求緩存服務器的本 地緩存無響應,則返回狀態碼 504 Gateway Timeout。

八、cache-extension

經過 cache-extension 標記(token),能夠擴展 Cache-Control 首部字 段內的指令。


我們在看看請求首部Cache-Control的值

一、pulic

這個字段和private是相對的,Cache-Control: public時,則代表全部的用戶在經過緩存服務器的時候,均可以緩存這個資源。

二、private

這個字段和pulic是相對的,Cache-Control: private時,則代表只有某個在經過緩存服務器的時候,獲得緩存資源

三、no-cache

若是服務器返回的響應中包含 no-cache 指令,那麼緩存服務器不能對 資源進行緩存。源服務器之後也將再也不對緩存服務器請求中提出的資 源有效性進行確認,且禁止其對響應資源進行緩存操做。

四、no-store

同請求首部的no-store指令同樣

五、no-transfrom

同請求首部的no-transfrom指令同樣

六、max-age

在Response中設置max-age的時間信息,能夠在客戶端生成緩存文件,在緩存不過時的狀況下,客戶端不會直接向服務器請求數據,在緩存過時的狀況下,客戶端會向服務器直接請求生成新的緩存。

若是同時設置了Response和Request中的max-age 緩存時間,若是Request中的max-age時間小於Response中的max-age時間,客戶端會根據Request中max-age時間週期去直接進行網絡請求,若是碰到斷網或者網絡請求不通的狀況,即便緩存還在有效期內(Response中設置的max-age時間足夠大),在Request設置的max-age過時以後,APP也會直接去進行網絡請求。 所以能夠考慮在客戶端的設計中一個和好的網絡緩存場景,用Response的max-age控制緩存的時間,用Request中max-age控制刷新的時間和機制

應用 HTTP/1.1 版本的緩存服務器遇到同時存在 Expires 首部字段的情 況時,會優先處理 max-age 指令,而忽略掉 Expires 首部字段。而 HTTP/1.0 版本的緩存服務器的狀況卻相反,max-age 指令會被忽略

七、s-max-age

和max-age相似,它們的不一樣點是 s- maxage 指令只適用於供多位用戶使用的公共緩存服務器 

八、must-revalidate

使用 must-revalidate 指令,代理會向源服務器再次驗證即將返回的響 應緩存目前是否仍然有效。

若代理沒法連通源服務器再次獲取有效資源的話,緩存必須給客戶端 一條 504(Gateway Timeout)狀態碼。

另外,使用 must-revalidate 指令會忽略請求的 max-stale 指令(即便已 經在首部使用了 max-stale,也不會再有效果)。

九、proxy-revalidate

proxy-revalidate 指令要求全部的緩存服務器在接收到客戶端帶有該指 令的請求返回響應以前,必須再次驗證緩存的有效性。

十、cache-extension

同請求首部的cache-extension指令同樣

相關文章
相關標籤/搜索