瀏覽器快取

2021-06-06 11:43:18 字數 1895 閱讀 9613

1.為什麼使用瀏覽器快取

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

2.瀏覽器快取存放在哪

瀏覽器一般會在使用者主機中建立乙個目錄,用來儲存快取檔案,有的瀏覽器會將部分快取放在記憶體中,這樣又對效能有了很大的提公升,省去了瀏覽器向快取目錄的查詢工作

3.不管是伺服器端快取還是瀏覽器端快取,都需要建立,判斷是否過期等一系列工作;那麼瀏覽器快取是怎樣完成這些工作的呢?

我們只掉動態內容快取的內容建立,儲存,以及過期檢查等一系列操作都是在伺服器端完成,但是瀏覽器快取是由伺服器生成內容,有瀏覽器儲存到本地,任何一方都不能完成所有操作,他們需要一種溝通機制,這就是http的「快取協商」

快取協商

幾個問題

伺服器怎樣,在哪規定哪些內容可以快取,哪些不可以? 這個問題我沒弄清楚,希望哪位牛人能給講解一下

伺服器根據什麼判定瀏覽器是否可以使用本地快取?

比較常用的方法是通過最後修改時間來判斷快取是否過期,靜態網頁一般web伺服器會自動為其生成過期時間,動態頁面必須我們通過**控制,我們需要在被請求的頁面中新增header("last-modified:".gmdate("d,d m y h:i:s")."gmt");這意味這我們給動態內容增加了一些http響應頭資訊,我們通過http watch工具重新整理瀏覽器看一下伺服器端返回的請求裡面多出了

我們再此請求該頁面,看一下瀏覽器發出的請求

可見瀏覽器接收到伺服器端的暗示,並在下次請求內容首先詢問「我請求的內容在這個時間之後是否有更新」,這是伺服器就需要根據這個時間判斷檔案是否更新(是否修改),可是web伺服器卻無法勝任這些工作,還得我們通過**控制,我們再訪問的頁面中新增

可能大家的發現了這裡的修改並非真正的檔案修改,而是在原來的基礎上加乙個時間值

徹底消滅請求

可能大家發現了,雖然上面提到根據last_modified判斷快取是否過期,我們還是需要向伺服器端傳送詢問,可不可以在本地判斷快取是否過期呢?其實http還有乙個屬性expires ,它定義了乙個絕對過期時間,它更像個授權者,瀏覽器一旦發現他的存在就會自動驗證快取是否過期,web伺服器預設不開啟此功能,我們需要進行相應的配置 apache配置如下

第二行功能開啟expires功能

後三行設定不同的型別的制定絕對過期時間,都採用access plus語法

新增expires標記

然後我們再跟蹤瀏覽器請求

目前還存在乙個問題,expires指定的過期時間使用的是伺服器端的過期時間,如果和客戶端時間不一致的話,就會影響本地快取的有效期檢查

例如如果我們設定的過期時間是1小時,可是客戶端的時間比伺服器短時間快2個小時,那麼直接就過期了。

怎樣解決這個問題呢?幸好http/1.1中還有乙個標記用於彌補experis的不足,他就是cache-control,他的格式如下

cache-control:max-age=

max-age指定了相對過期時間,單位是秒,並且這個時間是相對客戶端瀏覽器而言的

對於靜態頁面,web伺服器在開啟expires的情況下,會自動響應cache-control的,和上面一樣,動態頁面必須手動**新增

目前瀏覽器做的很好,如果http響應頭中既有expires也有cache-control的時候會優先考慮cache-control,對於沒有cache-control則會按照expires

下面說下瀏覽器重新整理方式

ctrl+f5 或者按著ctrl鍵單擊重新整理按鈕,強制重新整理網頁內容,跳過瀏覽器

快取 瀏覽器快取

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

瀏覽器快取

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

瀏覽器快取

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