第一篇講了 強緩存和協商緩存發生的時間順序,
這里拋出一個問題,強緩存與協商緩存什么關系?
強緩存和協商緩存
瀏覽器緩存是瀏覽器將用戶請求過的靜態資源存儲到電腦本地磁盤中,當再次訪問時,就可以直接從本地緩存中加載而不需要去向服務器請求了。但是緩存也有缺點,如果服務端資源更新了,客戶端沒有強制刷新的情況下,看到的內容還是舊的。所以,前端需要根據項目中各個資源的實際情況,做出合理的緩存策略。這就出現了強緩存和協商緩存。
強緩存: 通過http的response header中的Cache-Control和Expire兩個字段控制。
主要看Cache-Control:
private:僅瀏覽器可以緩存
public:瀏覽器和代理服務器都可以緩存
max-age=xxx:過期時間
no-cache:不進行強緩存
no-store:不強緩存,也不協商緩存
強緩存步驟:1,第一次請求文件時,緩存中沒有該信息,直接請求服務器。
2,服務器返回請求的文件,並且http response header中cache-control為max-age=xxx
3,再次請求該文件時,判斷是否過期,如果沒有過期,直接讀取本地緩存,如果已經過期了,則進行協商緩存。
協商緩存:它的觸發條件有兩點、
第一點是 Cache-Control 的值為 no-cache,則會促發協商緩存。
第二點是 max-age 過期了,觸發協商緩存。
后端需要怎么設置
以nodejs為例,如果需要瀏覽器強緩存,可以這樣設置:
res.setHeader('Cache-Control', 'public, max-age=xxx');
如果需要協商緩存,則可以這樣設置:
res.setHeader('Cache-Control', 'public, max-age=0'); res.setHeader('Last-Modified', xxx); res.setHeader('ETag', xxx);
