[toc]
快取的作用
- 減少頻寬
- 降低原始伺服器壓力
- 降低距離,網路造成的延時問題
1. 類別
1.1 私有快取
1.1.1 瀏覽器快取
瀏覽器會在我們的硬碟上開闢一塊控制元件來儲存資源副本,一個請求從瀏覽器快取裡調出幾乎是立即顯現出來的,比如一張圖片。 首頁一般不會被快取
Cache-Control
- no-cache 強制在快取前傳送帶驗證器的請求到伺服器
備註:
- 具體實現和瀏覽器有關,在chrome中測試永遠返回
200 OK
,因為請求頭中不會帶有校驗資訊(不管請求頭和響應頭誰設定了)。但是Safari中,會先去驗證。- 從字面上看很容易把
no-cache
理解成‘不快取’,但事實上代表不快取過期的資源,快取會向源伺服器進行有效期確認後處理資源,no-store
才是真正的不快取資源
- no-store 不快取
- max-age( s ) 設定瀏覽器快取的最大週期, 單位為秒
備註:
- 在快取週期(新鮮期)內, 請求不會去訪問服務端資源, 直接去快取取副本資源,並返回狀態
200 from cache
;- 如果資源更新了, 快取新內容, 返回
200
;- 過了新鮮期後,請求會帶著驗證器訪問伺服器, 如果資源沒有變化, 則繼續取的是快取資料, 並返回
304 Not Modified
, 並更新新鮮度;- 如果服務端已沒有此資源, 刪除快取, 返回
404
;- 如果引數為0,那麼快取伺服器通常會將請求轉向源伺服器;
- s-maxage( s ) 設定所為使用者共享快取的快取儲存的最大週期,對於像同一個使用者返回響應的伺服器來說這個指令沒有任何作用。
- Expires HTTP1.1 已經拋棄,建議用 max-age
驗證器
- if-match 通常是資料內容的 mdn 值,由原始伺服器生成。如果值與
ETage
值相同,才返回資源。(if-None-match
與之相反)
服務端相應的為
ETag
- if-Modified-Since:是最後更新時間,精確到s。
服務端相應的為
Last-modified
1.2 共享快取
1.2.1 代理伺服器快取 (ISP(Internet Service Provider)
1.2.2 閘道器快取 (CDN content delivery network)
多半是網站管理員部署,通常使用某種形式的負載均衡器,使多個閘道器看起來就像是原伺服器。CDN(內容分發網路Content delivery network)為整個或部分網路分配閘道器快取,然後把這些快取賣給需要的網站。
2. 快取的流程圖
3. 快取可能產生的問題
- 可能會造成資源更新不及時
建議更新資源的時候,更新資源名稱
- 跟蹤訪問量不方便
可以以埋點的方式檢測訪問量,設定流量很小的請求不進行快取