快取對訪問資源時的速度提公升有著重要的作用
快取的概念,在計算機組成原理中用到過,一種硬體:cache
在瀏覽器訪問伺服器資源的過程中,也經常用到快取機制。
整個快取機制有幾個階段:本地快取,協商快取,頁面快取。
本地快取階段:
就是檢查本地快取檔案中是否有要訪問的頁面資源《不同瀏覽器有不同檢查本地檔案的方式》
若無快取:那肯定會傳送請求到伺服器,然後得到資源。
若有快取:那肯定直接取自己的,減少訪問時間,快速得到資源。但是在拿到這個資源的時候,會有個問題,資源是不是最新的內容。
《判斷是否過期》那如何判斷呢?在快取的響應檔案裡,有乙個關鍵字:expires。這個表示這個檔案的過期時間。ps:既然有本地快取,那肯定是訪問過該資源的。人家伺服器比較貼心,在第一次響應中還加上了乙個檔案的保質期,讓瀏覽器再次用該快取資源時候看看保質期,防止吃過期食品。但是expires表示的是伺服器時間,萬一與客戶端時間不同怎麼辦?最新的http協議中改進了這個,增加了cache-control這個響應頭,增加了max-age欄位,來講明:超過這個時間s就會失效。優先順序比expires高》
協調快取階段:
若不過期:那就直接在本地快取中用。
若已過期:那肯定要去伺服器傳送請求,表示自己想要最新資源。但是注意這個時候,請求會帶上if-last-modified欄位,這個是什麼呢?在快取中顯示的該資源最近被修改時間。資源最近的被修改時間,瀏覽器怎麼知道的?肯定是快取資源本身帶的,在第一次的響應時,伺服器響應頭就加上了last-modified欄位,瀏覽器快取時候就儲存了這個資訊。請求中的這個欄位和伺服器資源中最新的資源修改時間進行比較。但是問題又來了,萬一資源確實最近又被修改了,但是內容一點點都沒變,和瀏覽器快取中的一毛一樣怎麼辦?不想再浪費時間進行傳輸了。那好http又提供了乙個新的etag欄位。該字段是資源在伺服器中的唯一標識,由檔案的索引節,檔案大小,修改時間組成,它存在於檔案的響應頭。在再次請求時,會帶上if-none-match(其內容就是etag)來進行比較伺服器資源的etag值。所以同時存在last-modified時,優先比較etag。
若etag/last-modified新:伺服器響應304,直接用瀏覽器中的快取資源。
若etag/last-modified舊:伺服器響應200,把伺服器中最新資源發過來。
說一點頁面快取:網頁文件分為3種:靜態文件,動態文件,活動文件。
動態文件,是一種服務端程式,他會在接受請求的時候被執行,程式執行結果作為響應返回。
若過多次請求都一樣,那麼動態文件執行結果也一樣。那麼請求一次,伺服器就執行程式一次,這樣就會很浪費效能。
怎麼解決呢?
把一次的動態文件的結果作為一種靜態文件,儲存在伺服器快取中,每次遇到相同的請求時,就把它返回過去,沒必要再次執行。
以後再學乙個小知識點時,必須要弄懂弄透徹,能用自己的話講出來教別人,這才能算學會。
最近,在學j2ee和jvm和演算法,並且作業系統,計網,計組要複習!累啊累啊累啊!
瀏覽器快取機制
最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後來查了一些資料以及同事親自驗證,總算對這些問題有了個清晰的理解,現在整理出來以...
瀏覽器快取機制
當我們瀏覽乙個頁面發現有異常時,通常考慮的就是書不是瀏覽器做了快取呢,按ctrl f5重新請求一次就能請求到沒有快取的頁面,這個是為什麼呢。首先,ctrl f5組合鍵重新整理頁面,那麼瀏覽器會直接向目標url傳送請求,而不再使用瀏覽器快取的資料。其次,當請求到達伺服器端依然有可能出現使用伺服器端的資...
瀏覽器快取機制
瀏覽器快取機制 瀏覽器快取機制,其實主要就是 協議定義的快取機制 如 expires cache control 等 但是也有非 協議定義的快取機制,如使用 html meta 標籤,web 開發者可以在 html 頁面的節點中加入 標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪問都需...