CDN和瀏覽器緩存

1,CDN 旨在解決的最重要的問題是什麼,咱們稱之爲網絡延遲,經過網絡獲取資源老是比從本地獲取慢,不管服務器是在同一個局域網中仍是位於世界的另外一個角落,都是如此。這裏的速度差別是 IT 行業的一個核心問題,開發者想了不少辦法試圖去彌補這個差別,CDN 就是應用最爲普遍的一個解決方案。
2,瀏覽器緩存 在未介入CDN以前,用戶在第一次訪問網站服務器的時候,瀏覽器會從服務器獲取全部的資源,在傳輸過程當中,瀏覽器會經過一些約定好的響應頭,從而肯定是否須要將這個資源保存一份到本地做爲緩存。當用戶第二次訪問該網站的時候,瀏覽器就會優先從緩存中加載資源,不用向服務器請求資源,從而提升了網站的訪問速度。
3,瀏覽器緩存策略
服務器會在資源返回的響應中,攜帶上如下四個經常使用的響應頭,瀏覽器會經過判別這些響應值來決定資源緩存的狀態。
ETag Cache-Control Expires Last-Modified
ETag 的值是一個字符串(數據的hash值),每一個數據都有個標誌,文件發生變化,這個標誌發生變化。服務器能夠在響應中返回 ETag,而後瀏覽器會在後續的請求中攜帶上這個參數來肯定緩存是否須要更新。若是 ETag 值相同,說明資源未更改,服務器會返回 304(Not Modified) 響應碼,瀏覽器就知道本地緩存仍然是可使用的。
ETag 只有在本地緩存已過時(Expires)或者緩存模式設置爲 no-cache(Cache-Control)的時候,纔會被瀏覽器攜帶上與服務器端的值進行判別。
Cache-Control 能夠攜帶多個響應值,這些值能夠設置緩存時間、狀態以及驗證狀態
public 全部內容都要被緩存,客戶端和代理服務器(CDN)均可以被緩存
private 內容只能被緩存到客戶端,不能被緩存到CDN
no-cache 客戶端必須和服務器確認ETag是否變化也就是資源是否被更改
no-store 全部內容都不會被緩存
must-revalidation/proxy-revalidation 緩存失效必須從新驗證緩存內容
max-age=xxx 緩存失效時間
Expires 響應頭標記數據的過時時間,例如:Expires: Sat, 27 Apr 2019 11:43:15 GMT 說明對應的數據會在 2019 年 4 月 27 號的 11 點 43 分後過時,若是 Cache-Control 中有 max-age 指令,瀏覽器會忽略此參數
Last-Modified 服務器經過這個響應頭,向瀏覽器發送數據上次被修改的時間,例如:Last-Modified:Wed, 24 Apr 2019 02:54:16 GMT 瀏覽器回對比本地和服務器的時間,服務器上的時間比本地時間要新,說明數據有更改,瀏覽器須要從新下載數據。
Accept-Ranges:bytes
Cache-Control:max-age=3600 // 緩存失效時間是1小時
Connection:Keep-Alive
Content-Length:4361
Content-Type:image/png //這是png圖片
Date:Wed,24 Apr 2019 17:26:16 GMT
ETag:"1109-554221c5c8540" //etag標識符 驗證緩存是否變化
Expires:Wed,24 Apr 2019 18:26:16 GMT //數據過時時間 max-age設置其會被忽略
Keep-Alive:timeout=5,max=93
Last-Modified:Mon,22 Apr 2019 08:21:34 GMT //上次資源被修改時間
Server:Apache
瀏覽器緩存的不足
當服務器返回的響應中有 Expires 或者 Cache-Control 設置了 max-age 響應頭的時候,瀏覽器不會向服務器發起校驗請求,而是直接複用本地緩存。若是此時服務器進行了資源的更新,用戶就沒法獲取到最新的資源,只能經過強制刷新瀏覽器緩存來跟服務器請求最新的資源。
 
4,CDN緩存策略
服務接入了 CDN 以後,瀏覽器本地緩存的資源過時以後,瀏覽器不是直接向源服務器請求資源,而是轉而向 CDN 邊緣節點請求資源。CDN 邊緣節點中將用戶的數據緩存起來,若是 CDN 中的緩存也過時了,CDN 邊緣節點會向源服務器發出回源請求,從而來獲取最新資源。如下介紹以又拍雲 CDN 爲例。
CDN 節點緩存策略通常都會遵循 HTTP 標準協議,又拍雲在沒有匹配到自定義緩存規則且源服務器也沒有返回任何有效緩存頭的狀況下,默認配置策略以下:
針對靜態資源,全部正常狀態碼(大於等於 200 小於 400)均緩存 8 天。特別地,301 響應緩存 2 小時,302 響應緩存 20 分鐘;
針對動態資源,程序會自動識別,則不進行緩存;
對於其餘大於等於 400 的不正常響應,則不進行緩存;
緩存節點通知瀏覽器緩存的具體時間由 HTTP 響應頭裏面的 Cache-Control 和 Expires 響應頭控制
CDN緩存缺點 當源服務器資源更新後,若是 CDN 節點上緩存數據還未過時,用戶訪問到的依舊是過時的緩存資源,這會致使用戶最終訪問出現誤差。所以,開發者須要手動刷新相關資源,使 CDN 緩存保持爲最新的狀態。
CDN緩存刷新 主動刷新(手動更新CDN資源)和被動刷新(等文件在 CDN 節點的緩存過時以後,節點回源拉取源服務器上最新的文件)
 
相關文章
相關標籤/搜索