Vary頭部由服務器端添加到響應頭部,在緩存中讀取到該響應時,會讀取到相應的頭部,進行一些針對緩存的判斷。針對相同的請求,不同的的編碼模式會需要返回不同的返回數據。因此如果要從緩存中獲取數據時需要緩存多個副本數據,以滿足不同的不同的格式,需要Vary頭部來解決這個問題。
1. Vary頭部的格式
Vary頭部一般出現在HTTP請求的響應頭部,格式為:Vary:Accept-Encoding,User-Agent或者Vary:Accept-Encoding。
Accept-Encoding表示客戶端支持的編碼格式,可以配置多個編碼格式。服務器端會根據請求端的Accept-Encoding對返回的內容進行編碼,并通過響應頭說明最終使用的編碼格式。User-Agent表示客戶端代理,表示了客戶端的各項信息,便于服務端針對不同要求的數據類型的返回操作。
2. 使用場景
在請求能夠緩存命中的時候,針對同一請求,緩存中分別存儲了A,B兩種格式的數據,很有可能導致只返回一種格式的數據。這就會讓數據的展示出現問題。比如某個客戶端支持壓縮gzip,另外一個客戶端不支持壓縮。如果返回同一格式的數據,就會導致返回錯誤的數據,出現故障。
Vary頭部可以解決這個問題。Vary頭部的信息從客戶端請求頭中的獲取,并存儲在緩存中。如果有請求命中緩存的話,通過請求頭中的信息和緩存中的Vary頭中信息比對,返回正確的緩存副本,返回正確的響應。
3.刷新場景特殊處理
針對部分刷新場景,刷新請求需要刪除所有的緩存副本,但由于緩存key的不同無法做到。對于這類場景,需要對多副本緩存的部分特殊處理,查詢到緩存的所有多副本再構造緩存key刪除。