Web 快取機制 與 快取策略

jserTang發表於2018-11-20

[toc]

快取的作用

  1. 減少頻寬
  2. 降低原始伺服器壓力
  3. 降低距離,網路造成的延時問題

1. 類別

1.1 私有快取

1.1.1 瀏覽器快取

瀏覽器會在我們的硬碟上開闢一塊控制元件來儲存資源副本,一個請求從瀏覽器快取裡調出幾乎是立即顯現出來的,比如一張圖片。 首頁一般不會被快取

Cache-Control
  1. no-cache 強制在快取前傳送帶驗證器的請求到伺服器

備註:

  1. 具體實現和瀏覽器有關,在chrome中測試永遠返回 200 OK,因為請求頭中不會帶有校驗資訊(不管請求頭和響應頭誰設定了)。但是Safari中,會先去驗證。
  2. 從字面上看很容易把no-cache理解成‘不快取’,但事實上代表不快取過期的資源,快取會向源伺服器進行有效期確認後處理資源,no-store才是真正的不快取資源
  1. no-store 不快取
  2. max-age( s ) 設定瀏覽器快取的最大週期, 單位為秒

備註:

  1. 在快取週期(新鮮期)內, 請求不會去訪問服務端資源, 直接去快取取副本資源,並返回狀態200 from cache;
  2. 如果資源更新了, 快取新內容, 返回 200;
  3. 過了新鮮期後,請求會帶著驗證器訪問伺服器, 如果資源沒有變化, 則繼續取的是快取資料, 並返回304 Not Modified, 並更新新鮮度;
  4. 如果服務端已沒有此資源, 刪除快取, 返回404;
  5. 如果引數為0,那麼快取伺服器通常會將請求轉向源伺服器;
  1. s-maxage( s ) 設定所為使用者共享快取的快取儲存的最大週期,對於像同一個使用者返回響應的伺服器來說這個指令沒有任何作用。
  2. Expires HTTP1.1 已經拋棄,建議用 max-age
驗證器
  1. if-match 通常是資料內容的 mdn 值,由原始伺服器生成。如果值與ETage值相同,才返回資源。(if-None-match與之相反)

服務端相應的為 ETag

  1. 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. 快取可能產生的問題

  1. 可能會造成資源更新不及時

    建議更新資源的時候,更新資源名稱

  2. 跟蹤訪問量不方便

    可以以埋點的方式檢測訪問量,設定流量很小的請求不進行快取

相關文章