http 緩存分爲客戶端緩存和服務端緩存web
1. 客戶端緩存瀏覽器
客戶端緩存指的是瀏覽器緩存, 瀏覽器緩存是最快的緩存, 由於它直接從本地獲取(但有可能須要發送一個請求), 它的優點是能夠減小網絡流量, 加快請求速度緩存
2. 服務器緩存服務器
服務器緩存指的是反向代理服務器或 cdn 緩存, 他的做用是用於減輕實際的 web server 的壓力.網絡
緩存生效都是經過 header 來控制的代理
1. Expirescdn
若是 repsonse 中帶有 Expires=date, 則表示這個 response 能夠由 瀏覽器/CDN 保存至 date 日期, 在到達 date 日期以前, 均可以直接提供給請求方, 對於瀏覽器緩存來講, 則能夠沒必要發請求, 對於反向代理服務器來講, 則能夠不用請求原始 serverserver
2. Cache-Control資源
Cache-Control 的值有不少, 最經常使用的是 max-age, 若是 response 帶有 max-age, 則表示從如今起到 max-age 以前, 這個 repsonse 均可以做爲緩存使用文檔
Server 的 Cache-Control
1. no-store, 提示客戶端應該刪除這個緩存
2. no-cache, 提示客戶端在從新驗證這個緩存以前不該該使用
3. max-age, 表示緩存的新鮮時間, 在此時間內能夠不發送 http 請求去驗證緩存而直接使用它, 若是 max-age=0. 則表示要求不要緩存文檔
4. s-maxage, 功能與 max-age 相同, 但只對共享緩存生效(CDN, 反向代理)
Client 的 Cache-Control
1. max-stale, 可使用過時緩存
2. max-stale=s, 在 s 秒內, 緩存能夠過時
3. min-fresh=s, 在 s 秒內, 緩存不能過時
4. max=age=s, 緩存的 age 必須小於 s 秒
5. no-cache, 除非資源進行再驗證, 不然不接受緩存
6. no-store, 表示反向代理服務器不該該緩存這個請求的 response
7. only-if-cached, 只想要已緩存的數據, 不然返回 504
若是 Cache-Control 的 max-age 與 Expires 同時存在, 則 max-age 優先
3. Last-Modified/If-Modified-Since
若是 response 帶有 Last-Modified, 則 request 在 Expires 跟 Cache-Control 的緩存過時後, 可使用將 Last-Modified 的時間帶到 request header If-Modified-Since 裏, 去 server 端校驗緩存是否改變, 若是 server 回覆 304, 則能夠繼續使用本地緩存
4. ETag/If-None-Match
若是 response 帶有 ETag, 則 request 在 Expires 跟 Cache-Control 的緩存過時後, 能夠將 Etag 的值帶到 request header If-None-Match, 若是 server 回覆 304, 則能夠繼續使用本地緩存
5. ETag & Last-Modified
若是 response 同時包含 ETag 與 Last-Modified, 則 request 須要同時發送 If-Modified-Since 和 If-None-Match, 而且 server 須要二者同時校驗經過才返回 304.