HTTP強緩存和協商緩存


一、瀏覽器緩存

Web 緩存能夠減少延遲與網絡阻塞,進而減少顯示某個資源所用的時間。借助 HTTP 緩存,Web 站點變得更具有響應性。

(一)、緩存優點:

  • 減少不必要的數據傳輸,節省帶寬
  • 減少服務器負擔,提升網站性能
  • 加快客戶端加載網頁的速度,用戶體驗友好

(二)、緩存缺點:

  • 服務端資源更新后,客戶端更新滯后

(三)、瀏覽器緩存主要有兩類:

  1. 強制緩存
  2. 協商緩存

(四)、強緩存與協商緩存的區別 如圖:

(五)、緩存機制原理:

        瀏覽器第一次請求:

                       

 

 

 

          瀏覽器后續再進行請求時:

                       

 從上圖可以知道瀏覽器在第一次請求發生后,再次請求時:

  • 瀏覽器在請求某一資源時,會先獲取該資源緩存的header信息,判斷是否命中強緩存(cache-control和expires信息),若命中直接從緩存中獲取資源信息,包括緩存header信息;本次請求根本就不會與服務器進行通信;

二、強緩存

不會向服務器發送請求,直接從緩存中讀取資源,請求返回狀態碼為 200.

強制緩存時,服務端會在 Response Headers 中的 cache-control 對緩存時間、緩存方式等進行定義,如下圖:


或者: 

 

 

 

cache-control 字段

cache-control: max-age=xxxx,public

  • 客戶端和代理服務器都可以緩存該資源;
  • 客戶端在xxx秒的有效期內,如果有請求該資源的需求的話就直接讀取緩存, statu code: 200
  • 如果用戶做了刷新操作,就向服務器發起http請求

cache-control: max-age=xxxx,private

  • 只允許客戶端可以緩存該資源;代理服務器不允許緩存
  • 客戶端在xxx秒內直接讀取緩存, statu code: 200

cache-control: max-age=xxxx,immutable

  • 客戶端在xxx秒的有效期內,如果有請求該資源的需求的話就直接讀取緩存, statu code:200
  • 即使用戶做了刷新操作,也不向服務器發起http請求

cache-control: no-cache

  • 跳過設置強緩存,但是不妨礙設置協商緩存;一般如果你做了強緩存,只有在強緩存失效了才走協商緩存的,設置了no-cache就不會走強緩存了,每次請求都回詢問服務端。

cache-control: no-store

  • 不緩存,這個會讓客戶端、服務器都不緩存,也就沒有所謂的強緩存、協商緩存了。

補充:強制緩存在 header 中還有一個字段可以設置失效時間,即Expires,不過Expires 是HTTP 1.0的東西,現在默認瀏覽器均默認使用HTTP 1.1,所以它的作用基本忽略。

三、協商緩存

向服務器發送請求,服務器會根據這個請求的 Request Headers 的一些參數(etag 和 last-modified)來判斷是否命中協商緩存,如果命中,則返回 304 狀態碼, 並帶上新的 Request Headers 通知瀏覽器從緩存中讀取資源;

協商緩存主要表現在 Response Headers 中的 etag 和 last-modified:

 

etag

  • 即文件hash,每個文件唯一

last-modified

  • 文件的修改時間,精確到秒

注意:

Response Headers 中的 etag、last-modified 在客戶端重新向服務端發起請求時,會在 Request Headers 中換個key名:if-none-matched 和 if-modified-since

如下:

  // Response Headers

etag: 65597c1615681857158408944e

last-modified: Wed, 11 Sep 2019 06:20:13 GMT

  // Request Headers 變為

if-none-matched: 65597c1615681857158408944e

if-modified-since: Wed, 11 Sep 2019 06:20:13 GMT

兩種緩存的共同點:都從客戶端緩存中讀取資源;區別是強緩存不會向服務器發請求,協商緩存會發請求

 

四、操作行為對緩存的影響

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM