瀏覽器緩存的話分為強緩存和協(xié)商緩存,類型是需要根據(jù)響應(yīng)頭返回的內(nèi)容來決定的敦第。
本地請求流程
圖片1
合理利用瀏覽器緩存的優(yōu)點
- 減少了一部分的http請求
- 加快了瀏覽器的網(wǎng)頁渲染速度
強緩存
不會向服務(wù)器發(fā)送請求芜果,直接從緩存中讀取資源,狀態(tài)碼200
Expires
http1.0的參數(shù)右钾,它的值是一個絕對值。
Cache-Control
http1.1的參數(shù)舀射, 優(yōu)先級大于Expires怀伦。值是一個相對時間。
另外頁面也可以使用強緩存邢羔,避免頻繁的向服務(wù)器發(fā)送請求吴攒。
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="expires" content="Wed, 20 Jun 2017 22:33:00 GMT">
協(xié)商緩存
向服務(wù)器發(fā)送請求,服務(wù)器會根據(jù)這個請求的request header的一些參數(shù)來判斷是否命中協(xié)商緩存洼怔,如果命中,則返回304狀態(tài)碼并帶上新的response header通知瀏覽器從緩存中讀取資源
Last-Modified if-Modify-Since
Etag if-None-Match
這兩組都是成對出現(xiàn)的镣隶,第一次請求的響應(yīng)頭帶上(Last-Modified 或者 Etag)诡右,那么后續(xù)的請求就會帶上相對應(yīng)的請求字段(if-Modify-Since 或者 if-None-Match)帆吻,如果響應(yīng)頭沒有這兩個字段,那么請求頭也不會攜帶相對應(yīng)的字段猜煮。
兩者差別
Last-Modified 的單位是精確到秒的败许, 如果一秒內(nèi)多次修改,是沒有辦法判斷的市殷。而Etag是通過算法生成的hsah值,每次修改都會重新生成搞挣。精確度比較高音羞。 另外 Etag 優(yōu)先級 比Last-Modified 高