協商快取
優先順序區別
瀏覽器快取包含兩種方式: 強快取與協商快取
在第一次請求資源時,伺服器返回所請求資源與有效時間,,瀏覽器將其快取在本地,在第二次請求該資源時, 瀏覽器判斷該資源是否在有效期中,如果在有效期就直接呼叫該資源,不向服務端發起請求。
expires
expires是http1.0的規範,它的值是乙個絕對時間的gmt格式的時間字串,這個時間代表這這個資源的失效時間,只要傳送請求時間是在expires之前,那麼本地快取始終有效,則在快取中讀取資料。
cache-control
cache-control是在http1.1**現的,主要是利用該字段的max-age值來進行判斷,它是乙個相對時間,例如cache-control:max-age=3600,代表著資源的有效期是3600秒。
在第一次請求資料時,伺服器會返回所請求資源與標識,瀏覽器將其快取在本地,當第二次請求同樣的資源時,瀏覽器會將該標識攜帶在請求頭中發給伺服器,伺服器驗證標識後,如果所請求資源未發生變化,就返回304狀態碼,告訴瀏覽器命中協商快取,直接呼叫快取,如果請求資源發生變化,則將新的資源與標識傳送給瀏覽器,進行重新快取
etag/if-none-match
etag/if-none-match返回的是乙個校驗碼。etag可以保證每乙個資源是唯一的,資源變化都會導致etag變化。伺服器根據瀏覽器上送的if-none-match值來判斷是否命中快取。
last-modify/if-modify-since
瀏覽器第一次請求乙個資源的時候,伺服器返回的header中會加上last-modify,last-modify是乙個時間標識該資源的最後修改時間。
當瀏覽器再次請求該資源時,request的請求頭中會包含if-modify-since,該值為快取之前返回的last-modify。伺服器收到if-modify-since後,根據資源的最後修改時間判斷是否命中快取。如果命中快取,則返回304,並且不會返回資源內容,並且不會返回last-modify。
強快取: 再次請求資源時,先不向伺服器發起請求,先判斷有效期,如果不在有效期才向伺服器發起請求
協商快取:無論是否變化,是否過期都會發起請求
強快取與協商快取
強制快取 當瀏覽器去請求某個檔案的時候,服務端就在respone header裡面對該檔案做了快取配置。快取的時間 快取型別都由服務端控制 expires 失效時間 伺服器時間與客戶端時間有偏差時,就可能會導致快取失效,比如使用者隨意修改了本地時間 http1.1新增cache control 1....
強快取 協商快取
強快取 客戶端第一次向伺服器請求資源時,伺服器返回某個資源的同時,新增某些頭部資訊,告訴客戶端將資源儲存在本地,並在未來的某個時點之前再次請求這個資源時,直接從本地獲取就可以了。字段控制 瀏覽器再次請求這個資源時,會先從快取中找到這個資源,然後獲取expires時間與當前的請求時間比較,如果expi...
強快取和協商快取
對於一次已經有快取存在的請求來說 即之前已經發過針對這個資源的請求,在本地已經有快取 如果發起請求,那麼 首先會去找到快取資源的響應頭中的expires 過期時間 和cache control 控制快取的失效性 來判斷當前是否直接使用快取,如果當前時間還在expires之前,即快取仍未失效的情況下,...