1. 程式人生 > >cache-control相關介紹

cache-control相關介紹

可快取性

public
表明響應可以被任何物件(包括:傳送請求的客戶端,代理伺服器,等等)快取。

private
表明響應只能被單個使用者快取,不能作為共享快取(即代理伺服器不能快取它)。

no-cache
 強制所有快取了該響應的快取使用者,在使用已儲存的快取資料前,傳送帶驗證器的請求到原始伺服器

only-if-cached
表明如果快取存在,只使用快取,無論原始伺服器資料是否有更新。

到期

max-age=<seconds>
設定快取儲存的最大週期,超過這個時間快取被認為過期(單位秒)。與Expires相反,時間是相對於請求的時間。

s-maxage=<seconds>
覆蓋max-age 或者 Expires 頭,但是僅適用於共享快取(比如各個代理),並且私有快取中它被忽略。

max-stale[=<seconds>]
表明客戶端願意接收一個已經過期的資源。 可選的設定一個時間(單位秒),表示響應不能超過的過時時間。

min-fresh=<seconds>
表示客戶端希望在指定的時間內獲取最新的響應。

stale-while
-revalidate=<seconds> ... stale-if-error=<seconds> ...

max-age:指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應;

min-fresh:指示客戶機可以接收響應時間小於當前時間加上指定時間的響應;

max-stale:指示客戶機可以接收超出超時期間的響應訊息。
如果指定max-stale訊息的值,那麼客戶機可以接收超出超時期指定值之內的響應訊息。

重新驗證和重新載入

must-revalidate
快取必須在使用之前驗證舊資源的狀態,並且不可使用過期資源。

proxy-revalidate
與must-revalidate作用相同,但它僅適用於共享快取(例如代理),並被私有快取忽略。 immutable 表示響應正文不會隨時間而改變。 資源(如果未過期)在伺服器上不發生改變,因此客戶端不應傳送重新驗證請求頭 (例如If-None-MatchIf-Modified-Since)來檢查更新, 即使使用者顯式地重新整理頁面。 在Firefox中,immutable只能被用在 https:// transactions. 有關更多資訊,請參閱這裡.

其他

no-store
快取不應儲存有關客戶端請求或伺服器響應的任何內容。

no-transform
不得對資源進行轉換或轉變。
Content-Encoding
, Content-Range, Content-Type等HTTP頭不能由代理修改。 例如,非透明代理可以對影象格式進行轉換,以便節省快取空間或者減少緩慢鏈路上的流量。 no-transform指令不允許這樣做。

示例一:禁止快取

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

示例二:快取靜態資源

對於應用程式中不會改變的檔案,你通常可以在傳送響應頭前新增積極快取。
這包括例如由應用程式提供的靜態檔案,例如影象,CSS檔案和JavaScript檔案。另請參閱Expires標題。

Cache-Control:public, max-age=31536000

其他

如果max-age=0出現在請求中,則代表【瀏覽器】要求【伺服器】,此次請求必須重新返回最新檔案(請求完成後,你會看到http狀態碼是200);
如果max-age=0出現在響應中,則代表【伺服器】要求【瀏覽器】你在使用本地快取的時候,必須先和伺服器進行一遍通訊,將etag、 If-Not-Modified等欄位傳遞給伺服器以便驗證當前瀏覽器端使用的檔案是否是最新的(如果瀏覽器用的是最新的檔案,http狀態碼返回304,伺服器告訴瀏覽器使用本地快取即可;否則返回200,瀏覽器得自己吧檔案重新下載一遍)。

Pragma: no-cache與Cache-Control: no-cache區別:

Pragma: no-cache相容http 1.0 ,
Cache-Control: no-cache是http 1.1提供的。
因此,Pragma: no-cache可以應用到http 1.0 和http 1.1,而Cache-Control: no-cache只能應用於http 1.1.
參考:“Cache-control”常見的取值有private、no-cache、max-age、must-revalidate等

Expires/Cache-Control 區別:

Expires/Cache-Control Header是控制瀏覽器是否直接從瀏覽器快取取資料還是重新發請求到伺服器取資料。
只是Cache-Control比Expires可以控制的多一些, 而且Cache-Control會重寫Expires的規則。

HTTP1.0和HTTP1.1的主要區別:

1,HTTP/1.0協議使用非持久連線,即在非持久連線下,一個tcp連線只傳輸一個Web物件,;
2,HTTP/1.1預設使用持久連線(然而,HTTP/1.1協議的客戶機和伺服器可以配置成使用非持久連線)。
在持久連線下,不必為每個Web物件的傳送建立一個新的連線,一個連線中可以傳輸多個物件!

檢視電腦上http版本:

控制面板–>Internet屬性–>高階

這裡寫圖片描述