網絡篇—瀏覽器緩存(一)
1、緩存類型
-
強緩存css
-
協商緩存算法
- 向服務器發送請求,服務器會根據這個請求的request header的一些參數來判斷是否命中協商緩存,若是命中,則返回304狀態碼並帶上新的response header通知瀏覽器從緩存中讀取資源;
-
異同瀏覽器
- 共同點:都是從客戶端緩存中讀取資源;
- 區別:強緩存不會發請求,協商緩存會發請求;
2、和緩存有關的header
- 強緩存
- 協商緩存
3、瀏覽器緩存過程
- 瀏覽器第一次加載資源,服務器返回200,瀏覽器將資源文件從服務器上請求下載下來,並把response header及該請求的返回時間一併緩存;
- 下一次加載資源時,先比較當前時間和上一次返回200時的時間差,若是沒有超過cache-control設置的max-age,則沒有過時,命中強緩存,不發請求直接從本地緩存讀取該文件(若是瀏覽器不支持HTTP1.1,則用expires判斷是否過時);
- 若是時間過時,則向服務器發送header帶有If-None-Match和If-Modified-Since 的請求;
- 服務器收到請求後,優先根據Etag的值判斷被請求的文件有沒有作修改,Etag值一致則沒有修改,命中協商緩存,返回304;若是不一致則有改動,直接返回新的資源文件帶上新的Etag值並返回 200;
- 若是服務器收到的請求沒有Etag值,則將If-Modified-Since和被請求文件的最後修改時間作比對,一致則命中協商緩存,返回304;不一致則返回新的last-modified和文件並返回 200;
4、設置瀏覽器緩存
- 經過HTML的META設置expires和cache-control
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Sun Oct 15 2018 20:39:53 GMT+0800 (CST)" />
- 此方法僅對該網頁有效,對網頁中的圖片或其餘請求無效。
- 圖片,css,js,flash的緩存
5、用戶行爲對瀏覽器緩存的控制
- 地址欄訪問,連接跳轉是正經常使用戶行爲,將會觸發瀏覽器緩存機制;
- F5刷新,瀏覽器會設置max-age=0,跳過強緩存判斷,會進行協商緩存判斷;
- ctrl+F5刷新,跳過強緩存和協商緩存,直接從服務器拉取資源