1. 程式人生 > >簡述HTTP協議報文首部緩存機制

簡述HTTP協議報文首部緩存機制

tag 會有 哪些 mat http1 public 命中 請求響應 max

http緩存原理與機制

強制緩存機制(過期時間機制):
基本原理:在客戶端第一次請求服務端時,服務端會將緩存規則信息添加在header中,客戶端會通過這些信息判斷是否能緩存。若是強制緩存,則header中會有兩個字段來標記緩存失效的時間(expires或cache-control),要指出的是在HTTP1.0中,只支持expires,目前的瀏覽器默認都是HTTP1.1了,基本都支持cache-control。在客戶端第一次請求並添加緩存後,以後每次客戶端的請求響應數據都是緩存服務器提供的,不會再經由服務端。緩存服務器根據cache-control字段來判斷何時更新緩存,是否更新緩存,是否可以使用緩存。

cache-control有下面幾個參數:
private,允許客戶端使用緩存
max-age,緩存最大失效時長
public,允許客戶端和代理使用緩存
no-cache,關閉強制緩存,需要使用對比緩存
no-store,所有內容都不使用緩存
請求報文首部和響應報文首部都有cache-control
對比緩存機制(條件式緩存機制):
基本原理:
1.緩存命中的情況:客戶端會向緩存服務器請求獲取緩存header標識,客戶端獲取標識後,會向後端服務器發送header標識規則,若未失效便通知客戶端使用緩存服務器緩存的數據(一般狀態碼為304)。值得註意的是在客戶端獲取header標識後只會向後端服務器發送header,服務端也只會向客戶端返回header。
2.緩存未命中的情況:客戶端會向緩存服務器請求獲取緩存header標識,客戶端獲取標識後,會向後端服務器發送header標識規則,若失效便通知客戶端不使用緩存服務器緩存的數據(一般狀態碼為200),並更新緩存。
對比緩存的標識:
last-modified/if-modfied-since:資源最後修改時間戳
etag/if-none-match:資源校驗碼,可以是類似hash值的算法(優先級高於last-modified)
不管是以上哪一種都是為了比對當前緩存內容和後端服務器最新內容是否一致的。若返回值為304則認為是一致,則直接使用緩存;若返回值是200則認為是不一致,則更新緩存。

緩存方式:
1.代理式緩存:當用戶發送請求時,會先經由緩存服務器,若緩存命中便直接返回給客戶端,若沒命中則由緩存服務器向後端主機發送請求並相應給客戶端,再由緩存服務器判斷是否緩存響應的內容。

2.旁掛式緩存:當用戶發送請求時,會先經由緩存服務器,若緩存命中便直接返回給客戶端,若沒命中則由客戶端自己向後端主機發送請求並相應給客戶端,再由客戶端判斷是否緩存響應的內容。

varnish是一款代理式緩存程序,降低了客戶端的要求,客戶端不需要判斷哪些內容需要緩存哪些不需要緩存,增強了用戶體驗。現在一般都是使用代理式緩存模型。

varnish的緩存存儲機制:
-s
malloc
file
persistent (測試階段,還未有正式版)

簡述HTTP協議報文首部緩存機制