Http頭中與緩存相關的參數有Pragma\Cache-Control\Expires\Last-Modified\If-Modified-Since,此處的緩存主要指反向代理緩存(如Varnish、SQUID等)。html
術語解釋:
- 資源(Resource):一種網絡數據對象或服務,能夠用URI指定。
- 服務器(Server):它贊成請求端的連接,併發送響應(response),任何給定的程序均可能既作客戶端有作服務器。
- 源服務器(Origin Server):存在資源或者資源在其上被建立的服務器(Server),叫源服務器(Origin Server)
- 年齡(Age):一個響應的年齡是從被原服務器發送或成功驗證到如今的時間。
- 保鮮壽命(Freshness Lifetime):一個響應產生到過時之間的時間。
- 陳舊(Stale):一個響應的年齡(Age)超過了他的保鮮年齡(Freshness Lifetime),那麼就是陳舊的。
- 保鮮(Fresh):陳舊的反義詞。
- 緩存(Cache):緩存是程序響應消息的本地存儲。緩存是一個子系統,控制消息的存儲、得到和刪除。
- 客戶端(Client):爲發送請求創建鏈接的程序。
Cache-Control:
Cache-Control 是一個經常使用頭域,用於指定全部屬於請求/響應鏈上的緩存機制(Varnish、SQUID等)必須遵照的指令,指令的指定行爲目的是避免緩存形成對請求或響應的不利干擾。 這些指令一般會覆蓋默認的緩存算法。緩存指令是單向的,在一個請求中設置的緩存指令並不意味這在響應頭中也能夠獲得相同的指令。算法
Http頭參數格式:
Cache-Control: value
請求頭可能參數值:
- no-cache 響應必須從源服務器(Origin Server)返回,不使用緩存
- no-store 緩存(Cache)不該該存儲任何客戶端請求以及服務器響應
- max-age=delta-seconds 代表客戶端(Clinet)願意接受一個年齡(Age)不大於指定秒數的緩存
- max-stable[=delta-seconds] 代表客戶端(Client)願意接受一個陳舊(Stable)的緩存,但若是指定了秒數,緩存的年齡(Age)不能超過指定秒
- min-fresh=delta-seconds 代表客戶端(Client)願意接受一個保鮮壽命(Freshness Lifetime)大於年齡(Age)加上指定的秒數
- no-transform 不轉變消息主體
- only-if-cached 只有當緩存(Cache)有對應被緩存的數據才返回數據,不該該去檢索源服務器(Origin Server)查看是否有新備份存在
響應頭可能參數值:
- public 代表響應能夠被任何緩存(Cache)保存。
- private 代表所有或部分的響應消息是留給單獨用戶的,不能緩存在公有的緩存中
- no-cache 響應必須從源服務器(Origin Server)返回,不使用緩存
- no-store 緩存(Cache)不該該存儲任何客戶端請求以及服務器響應
- no-transform 不轉變消息主體
- must-revalidate 緩存(Cache)必須在使用文檔前驗證是否過時,過時不該該被使用
- proxy-revalidate 通must-revaliadate
- max-age=delta-seconds 代表客戶端(Clinet)願意接受一個年齡(Age)不大於指定秒數的緩存
- s-maxage=delta-seconds 這個指令指定的秒數會覆蓋max-age指令或Expires頭,老是忽略私有緩存
注意:chrome
- Http/1.0 可能沒有實現Cache-Control參數,只實現了Pragma: no-cache
技巧:瀏覽器
- 當瀏覽器展現的頁面不是咱們所預期的,一般先考慮是否是緩存緣由,可使用ctrl + F5(FireFox、chrome均可用)強制刷新,將會在請求頭中加入Pragma:no-cache和Cache-Control:no-cache
突然發現網上有Http協議的中文PDF,寫的很是詳細,因此本博客到此結束,有興趣請參考一下地址:緩存
w3c Http Header Field : https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html服務器
Http tutorials : http://www.tutorialspoint.com/http/http_header_fields.htm網絡
Http協議中文PDF : http://pan.baidu.com/s/1slgSnUX併發