瀏覽器緩存
瀏覽器緩存是瀏覽器在本地磁盤對用戶最近請求過的文檔進行存儲,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁盤加載文檔。
所以根據上面的特點,瀏覽器緩存有下面的優點:
減少冗余的數據傳輸 減少服務器負擔 加快客戶端加載網頁的速度瀏覽器緩存是Web性能優化的重要方式。那么瀏覽器緩存的過程究竟是怎么樣的呢?
在瀏覽器第一次發起請求時,本地無緩存,向web服務器發送請求,服務器起端響應請求,瀏覽器端緩存。過程如下:
在第一次請求時,服務器會將頁面最后修改時間通過Last-Modified標識由服務器發送給客戶端,客戶端記錄修改時間;服務器還會生成一個Etag,并發送給客戶端。
瀏覽器后續再次進行請求時:
瀏覽器緩存主要分為強強緩存(也稱本地緩存)和協商緩存(也稱弱緩存)。根據上圖,瀏覽器在第一次請求發生后,再次發送請求時:
瀏覽器請求某一資源時,會先獲取該資源緩存的header信息,然后根據header中的Cache-Control和Expires來判斷是否過期。若沒過期則直接從緩存中獲取資源信息,包括緩存的header的信息,所以此次請求不會與服務器進行通信。這里判斷是否過期,則是強緩存相關。后面會講Cache-Control和Expires相關。 如果顯示已過期,瀏覽器會向服務器端發送請求,這個請求會攜帶第一次請求返回的有關緩存的header字段信息,比如客戶端會通過If-None-Match頭將先前服務器端發送過來的Etag發送給服務器,服務會對比這個客戶端發過來的Etag是否與服務器的相同,若相同,就將If-None-Match的值設為false,返回狀態304,客戶端繼續使用本地緩存,不解析服務器端發回來的數據,若不相同就將If-None-Match的值設為true,返回狀態為200,客戶端重新機械服務器端返回的數據;客戶端還會通過If-Modified-Since頭將先前服務器端發過來的最后修改時間戳發送給服務器,服務器端通過這個時間戳判斷客戶端的頁面是否是最新的,如果不是最新的,則返回最新的內容,如果是最新的,則返回304,客戶端繼續使用本地緩存。一 強制緩存
強制緩存整體流程比較簡單,就是在第一次訪問服務器取到數據之后,在過期時間之內不會再去重復請求。實現這個流程的核心就是如何知道當前時間是否超過了過期時間。
強制緩存的過期時間通過第一次訪問服務器時返回的響應頭獲取。在 http 1.0 和 http 1.1 版本中通過不同的響應頭字段實現。
http 1.0
在 http 1.0 版本中,強制緩存通過 Expires 響應頭來實現。 expires 表示未來資源會過期的時間。也就是說,當發起請求的時間超過了 expires 設定的時間,即表示資源緩存時間到期,會發送請求到服務器重新獲取資源。而如果發起請求的時間在 expires 限定的時間之內,瀏覽器會直接讀取本地緩存數據庫中的信息(from memory or from disk),兩種方式根據瀏覽器的策略隨機獲取。
新聞熱點
疑難解答
圖片精選