緩存的實現原理
-
什麼是 Web 緩存
WEB 緩存(cache)位於 Web 服務器和客戶端之間。 緩存會根據請求保存輸出內容的副本,例如 html 頁面,圖片,文件,當下一個請求來 到的時候:如果是相同的 URL,緩存直接使用副本響應訪問請求,而不是向源服務器再次發 送請求。 HTTP 協議定義了相關的消息頭來使 WEB 緩存儘可能好的工作。
-
緩存的優點
1.減少相應延遲:因爲請求從緩存服務器(離客戶端更近)而不是源服務器被相應, 這個過程耗時更少,讓 web 服務器看上去相應更快。 2.減少網絡帶寬消耗:當副本被重用時會減低客戶端的帶寬消耗;客戶可以節省帶 寬費用,控制帶寬的需求的增長並更易於管理。
-
與緩存相關的 HTTP 擴展消息頭
1.Expires:指示響應內容過期的時間,格林威治時間 GMT 2.Cache-Control:更細緻的控制緩存的內容 3.Last-Modified:響應中資源最後一次修改的時間 4.ETag:響應中資源的校驗值,在服務器上某個時段是唯一標識的。 5.Date:服務器的時間 6.If-Modified-Since:客戶端存取的該資源最後一次修改的時間,同 Last-Modified。 7.If-None-Match:客戶端存取的該資源的檢驗值,同 ETag。
-
客戶端緩存生效的常見流程
服務器收到請求時,會在 200OK 中回送該資源的 Last-Modified 和 ETag 頭,客戶端將 該資源保存在 cache 中,並記錄這兩個屬性。當客戶端需要發送相同的請求時,會在請求中 攜帶 If-Modified-Since 和 If-None-Match 兩個頭。兩個頭的值分別是響應中 Last-Modified 和 ETag 頭的值。服務器通過這兩個頭判斷本地資源未發生變化,客戶端不 需要重新下載,返回 304 響應。常見流程如下圖所示:
-
Web 緩存機制
HTTP/1.1 中緩存的目的是爲了在很多情況下減少發送請求,同時在許多情況下可以不 需要發送完整響應。前者減少了網絡迴路的數量; HTTP 利用一個“過期( expiration)” 機制來爲此目的。後者減少了網絡應用的帶寬; HTTP 用“驗證( validation)”機制來爲 此目的。
-
HTTP 定義了 3 種緩存機制:
1) Freshness:允許一個迴應消息可以在源服務器不被重新檢查,並且可以由服務器和 客戶端來控制。例如, Expires 迴應頭給了一個文檔不可用的時間。 Cache-Control 中的 max-age 標識指明瞭緩存的最長時間; 2) Validation:用來檢查以一個緩存的迴應是否仍然可用。例如,如果一個迴應有一 個 Last-Modified 迴應頭,緩存能夠使用 If-Modified-Since 來判斷是否已改變,以便判斷 根據情況發送請求; 3) Invalidation: 在另一個請求通過緩存的時候,常常有一個副作用。例如,如果一 個 URL 關聯到一個緩存迴應,但是其後跟着 POST、 PUT 和 DELETE 的請求的話,緩存就會過 期。