標籤:
http 緩衝分為用戶端緩衝和服務端緩衝
1. 用戶端緩衝
用戶端緩衝指的是瀏覽器緩衝, 瀏覽器緩衝是最快的緩衝, 因為它直接從本地擷取(但有可能需要發送一個請求), 它的優勢是可以減少網路流量, 加快請求速度
2. 伺服器緩衝
伺服器緩衝指的是反向 Proxy伺服器或 cdn 緩衝, 他的作用是用於減輕實際的 web server 的壓力.
緩衝生效都是通過 header 來控制的
1. Expires
如果 repsonse 中帶有 Expires=date, 則表示這個 response 可以由 瀏覽器/CDN 儲存至 date 日期, 在到達 date 日期之前, 都可以直接提供給請求方, 對於瀏覽器緩衝來說, 則可以不必發請求, 對於反向 Proxy伺服器來說, 則可以不用請求原始 server
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, 反向 Proxy)
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, 表示反向 Proxy伺服器不應該緩衝這個請求的 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.
HTTP 協議緩衝