瀏覽器快取

2021-07-11 10:35:22 字數 2425 閱讀 4971

瀏覽器快取知識歸納:

瀏覽器快取是提公升網頁效能的一大利器,但是,也是一把雙刃劍。利用的好網頁的效能會有大幅度提公升,伺服器的壓力也會減小。利用的不好,也會遇到很多的問題。本文結合瀏覽器快取的知識,結合真實案例進行分析,希望對讀者有所幫助。

瀏覽器快取分類

瀏覽器快取分為強快取和協商快取,瀏覽器載入乙個頁面的簡單流程如下:

1、瀏覽器先根據這個資源的http頭資訊來判斷是否命中強快取。如果命中則直接加在快取中的資源,並不會將請求傳送到伺服器。

2、如果未命中強快取,則瀏覽器會將資源載入請求傳送到伺服器。伺服器來判斷瀏覽器本地快取是否失效。若可以使用,則伺服器並不會返回資源資訊,瀏覽器繼續從快取載入資源。

3、如果未命中協商快取,則伺服器會將完整的資源返回給瀏覽器,瀏覽器載入新資源,並更新快取。

強快取命中強快取時,瀏覽器並不會將請求傳送給伺服器。在chrome的開發者工具中看到http的返回碼是200,但是在size列會顯示為(from cache)。

強快取強快取是利用http的返回頭中的expires或者cache-control兩個欄位來控制的,用來表示資源的快取時間。

expires

該字段會返回乙個時間,比如expires:thu,31 dec 2037 23:59:59 gmt。這個時間代表著這個資源的失效時間,也就是說在2023年12月31日23點59分59秒之前都是有效的,即命中快取。這種方式有乙個明顯的缺點,由於失效時間是乙個絕對時間,所以當客戶端本地時間被修改以後,伺服器與客戶端時間偏差變大以後,就會導致快取混亂。於是發展出了cache-control。

cache-control

cache-control是乙個相對時間,例如cache-control:3600,代表著資源的有效期是3600秒。由於是相對時間,並且都是與客戶端時間比較,所以伺服器與客戶端時間偏差也不會導致問題。

『cache-control與expires可以在服務端配置同時啟用或者啟用任意乙個,同時啟用的時候cache-control優先順序高。

協商快取

若未命中強快取,則瀏覽器會將請求傳送至伺服器。伺服器根據http頭資訊中的last-modify/if-modify-since或etag/if-none-match來判斷是否命中協商快取。如果命中,則http返回碼為304,瀏覽器從快取中載入資源。

last-modify/if-modify-since

瀏覽器第一次請求乙個資源的時候,伺服器返回的header中會加上last-modify,last-modify是乙個時間標識該資源的最後修改時間,例如last-modify: thu,31 dec 2037 23:59:59 gmt。

last-modify

當瀏覽器再次請求該資源時,上送的請求頭中會包含if-modify-since,該值為快取之前返回的last-modify。伺服器收到if-modify-since後,根據資源的最後修改時間判斷是否命中快取。

if-modify-since

瀏覽器第一次請求乙個資源的時候,伺服器返回的header中會加上last-modify,last-modify是乙個時間標識該資源的最後修改時間,例如last-modify: thu,31 dec 2037 23:59:59 gmt。

當瀏覽器再次請求該資源時,上送的請求頭中會包含if-modify-since,該值為快取之前返回的last-modify。伺服器收到if-modify-since後,根據資源的最後修改時間判斷是否命中快取。 

if-modify-since

如果命中快取,則返回http304,並且不會返回資源內容,並且不會返回last-modify。由於對比的服務端時間,所以客戶端與服務端時間差距不會導致問題。但是有時候通過最後修改時間來判斷資源是否修改還是不太準確(資源變化了最後修改時間也可以一致)。於是出現了etag/if-none-match。

etag/if-none-match

與last-modify/if-modify-since不同的是,etag/if-none-match返回的是乙個校驗碼(etag: entity tag)。etag可以保證每乙個資源是唯一的,資源變化都會導致etag變化*。伺服器根據瀏覽器上送的if-none-match值來判斷是否命中快取。

etag

etag擴充套件說明

我們對etag寄予厚望,希望它對於每乙個url生成唯一的值,資源變化時etag也發生變化。神秘的etag是如何生成的呢?以apache為例,etag生成靠以下幾種因子

1、檔案的i-node編號,此i-node非彼inode。是linux/unix用來識別檔案的編號。是的,識別檔案用的不是檔名。使用命令』ls –i』可以看到。

2、檔案最後修改時間

3、檔案大小

生成etag的時候,可以使用其中一種或幾種因子,使用抗碰撞雜湊函式來生成。所以,理論上etag也是會重複的,只是概率小到可以忽略。

生產問題分析

背景:某次投產,某系統投產後由於強快取設定時間不恰當導致變更的功能沒有體現。後來通過變更檔案路徑強行解決問題。

快取 瀏覽器快取

瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...

瀏覽器快取

1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...

瀏覽器快取

伺服器客戶端 etag if none match last modified if modified since 客戶端第一請求某個url,伺服器傳回的響應頭里有 last modified 和 etag 瀏覽器快取此次結果 瀏覽器第二次請求這個url,向伺服器傳送的請求頭里有 if modifi...