·
· 報文頭里的一些關鍵資訊:· e
xpires
:http1.0 中的標準,表明過期時間,注意此處的時間都是指的是伺服器的時間。 ·
cache-control
:http1.1 中的標準,可以看成是 expires 的補充。使用的是相對時間的概念。
· cache-control的屬性: ·
max-age: 設定快取的最大的有效時間,單位為秒(s)。max-age會覆蓋掉expires ·
s-maxage: 只用於共享快取,比如cdn快取(s -> share)。與max-age 的區別是:max-age用於普通快取,
而s-maxage用於**快取。如果存在s-maxage,則會覆蓋max-age 和 expires. ·
public:響應會被快取,並且在多使用者間共享。預設是public。 ·
private: 響應只作為私有的快取,不能在使用者間共享。如果要求http認證,響應會自動設定為private。 ·
no-cache: 指定不快取響應,表明資源不進行快取。但是設定了no-cache之後並不代表瀏覽器不快取,而是在快取前要向伺服器確認資源是否被更改。因此有的時候只設定no-cache防止快取還是不夠保險,還可以加上private指令,將過期時間設為過去的時間。 ·
no-store: 絕對禁止快取。 ·
last-modified
: 表明請求的資源上次的修改時間。 ·
if-modified-since
:客戶端保留的資源上次的修改時間。 ·
etag
:資源的內容標識。(不唯一,通常為檔案的md5或者一段hash值,只要保證寫入和驗證時的方法一致即可) ·
所以快取
的呼叫步驟是:
1) 檢視是否有cache-control 的max-age / s-maxage , 如果有,則用伺服器時間date值 + max-age/s-maxage 的秒數計算出新的過期時間,將當前時間與過期時間進行比較,判斷是否過期
2)如果沒有,
則用expires 作為過期時間比較
· 3)如果過期了,則請求伺服器,伺服器接收到請求之後,通過last-modified和etag判斷檔案是否修改過,如果沒有修改過則傳送乙個304到客戶端,告訴瀏覽器直接從自己本地的緩訪問資料;如果修改過那就整個資料重新發給瀏覽器。
瀏覽器快取詳解
第一次請求了 100 個檔案,再次訪問的時候,如果全部重新請求,非常浪費時間,也很笨拙.分析 因為有些檔案,在使用者的多次請求中,都是相同的,如果多次請求都重複請求這個檔案,無疑是一種浪費.那麼就想到了快取 把資源快取到本地,再次請求的時候直接使用本地的快取檔案.走極端 把所有的檔案都快取起來.分析...
瀏覽器快取詳解
1.快取位置 1.service worker,service worker是執行在瀏覽器背後的獨立執行緒,一般可以用來實現快取功能.使用service worker必須使用https協議,因為service worker涉及請求攔截,所以必須使用https協議來保證安全.3.disk cache,...
瀏覽器快取詳解
瀏覽器快取 快取位置 當未命中快取,會呼叫fetch函式獲取資料,也就是根據快取查詢優先順序去查詢資料。此時無論從哪獲取的資料,都會顯示是從service worker中獲取的 瀏覽器快取機制的關鍵 強快取協商快取 使用者行為對瀏覽器快取的影響 如果有快取則使用,沒有則傳送請求 普通重新整理 f5 ...