http緩存相關header

Cache-Control:

no-cache #不使用本地緩存。需要使用緩存協商,先與服務器確認返回的響應是否被更改,如果之前的響應中存在ETag,那麼請求的時候會與服務端驗證,如果資源未被更改,則可以避免重新下載

no-store #直接禁止遊覽器緩存數據,每次用戶請求該資源,都會向服務器發送一個請求,每次都會下載完整的資源

public #可以被所有的用戶緩存,包括終端用戶和CDN等中間代理服務器

private #只能被終端用戶的瀏覽器緩存,不允許CDN等中繼緩存服務器對其緩存

max-age 從當前請求開始,允許獲取的響應被重用的最長時間(秒)


根據文件修改時間的緩存策略

last-modified #response

if-modified-since #request


瀏覽器第一次請求資源時,服務器會把資源的最新修改時間Last-Modified:Thu, 29 Dec 2011 18:23:55 GMT放在響應頭中返回給瀏覽器,第二次請求時,瀏覽器就會把上一次服務器返回的修改時間放在請求頭If-Modified-Since:Thu, 29 Dec 2011 18:23:55發送給服務器,服務器就會拿這個時間跟服務器上的資源的最新修改時間進行對比,如果兩者相等或者大於服務器上的最新修改時間,那麼表示瀏覽器的緩存是有效的,此時緩存會命中,服務器就不再返回內容給瀏覽器了,同時Last-Modified頭也不會返回,因爲資源沒被修改,返回了也沒什麼意義。如果沒命中緩存則最新修改的資源連同Last-Modified頭一起返回。


根據文件內容的緩存策略

ETag #response

If-None-Match #request


ETag/If-None-Match與Last-Modified/If-Modified-Since的流程其實是類似的,唯一的區別是它基於資源的內容的摘要信息(比如MD5 hash)來判斷。瀏覽器發送第二次請求時,會把第一次的響應頭信息ETag的值放在If-None-Match的請求頭中發送到服務器,與最新的資源的摘要信息對比,如果相等,取瀏覽器緩存,否則內容有更新,最新的資源連同最新的摘要信息返回。用ETag的好處是如果因爲某種原因到時資源的修改時間沒改變,那麼用ETag就能區分資源是不是有被更新。




Expires

Expires是HTTP/1.0出現的頭信息,同樣是用於決定本地緩存策略的頭,它是一個絕對時間,時間格式是如Mon, 10 Jun 2015 21:31:12 GMT,只要發送請求時間是在Expires之前,那麼本地緩存始終有效,否則就會去服務器發送請求獲取新的資源。如果同時出現Cache-Control:max-age和Expires,那麼max-age優先級更高

Age #文件已經緩存的時間

Date #當前時間/請求發送時間


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章