HTTP快取剖析

2021-09-13 22:33:49 字數 1930 閱讀 8068

從使用者的角度來看web快取加快了上網速度,當然這是使用者主觀認為的增加了上網速度,從設計者的角度來看:

1.網路頻寬的限制,也就是說在單位時間內,使用者從網路上獲取的資訊是有著上限的,這就限制了使用者的上網速度,而快取可以造成一種加快上網速度的假象;

2.快取可以有效的減少網路冗餘資訊的傳輸,即同乙個頁面如果使用者每個一段時間就重新整理一次,伺服器中的頁面並沒有發生變化,如果使用者每重新整理一次伺服器就傳送乙個新的頁面這就造成了資料的冗餘;

3.快取可以有效地削弱瞬間擁塞現象;瞬間擁塞可能造成整個網路和伺服器的崩潰;

雖然快取有著種種好處,但是快取並不是簡簡單單地在本地儲存乙個頁面,快取首先要面對的乙個現實問題即網路上有海量的頁面,總不能都快取吧;為了解決這個問題,提出了快取命中的概念(快取命中這個概念顯然是乙個舶來品)所謂的快取命中是指當乙個請求所需的頁面在本地快取中,並且經過檢測快取的頁面並沒有在伺服器發生變化,瀏覽器將使用本地快取的頁面(快取頁面的再檢測也稱為快取頁面的保鮮度,當瀏覽器發現所需的頁面在本地快取中,為了確定頁面是否是最新的頁面時,瀏覽器將向伺服器傳送乙個請求詢問頁面是否是最新的,最新的依據就是頁面的最後修改時間,若伺服器發現頁面是最新的,則返回乙個應答,若發現頁面不是最新的將會把最新的頁面傳送給瀏覽器)

若將快取單獨地存放在乙個伺服器中,就形成了快取伺服器,快取伺服器的拓撲結構多種多樣,有層次結構、網狀結構和對等結構等,但是快取伺服器的處理流程基本相同:

cacahe-control:maxage/文件的相對過期時間

expire: /文件的絕對過期時間

相對過期時間相對於絕對過期時間更好一些,因為絕對過期時間依賴於計算機時鐘的本地設定;

伺服器再驗證當文件的到期時間到了,但並不能說明文件在伺服器端也發生了變化,因此此時就需要瀏覽器向伺服器進行再驗證,注意當伺服器已經掛掉了,而快取又需要驗證,快取就要返回一條錯誤資訊;

條件驗證

http允許快取向原始伺服器傳送乙個條件get,將新鮮度檢測和獲取物件合併成乙個get請求,請求伺服器只有在文件和快取的文件不一致時才會返回新的文件。

if-modified-since:如果從指定日期之後文件被修改過,就執行請求方法,可以與last—modified伺服器響應首部配合使用,只有在內容被修改後與已快取的版本不同的時候才去獲取內容。

if-none-math:伺服器可以提供特殊的標籤,而不是將其與最近的修改日期相匹配,這些標籤就像序列號一樣,如果已快取的標籤和伺服器的標籤不同,則執行請求的方法,返回新的內容。
快取設定cache-control:no-store表示不再快取中快取文件

cache-control:no-cache表示可以在本地快取文件,但在新鮮度檢測之前不得返給瀏覽器,不管文件是否過期;

cache-control:maxage表示文件的最大快取時間

expire:表示文件的過期時間

cache-control:must-revaildate表示在文件過期後,必須進行新鮮度檢測後才能返回給瀏覽器

探測性過期演算法:

如果未設定cache-control,且文件有快取線索即最後修改日期,瀏覽器可以執行探測性演算法計算出乙個大概的日期,其中lm-factor演算法如下:

新的過期日期=server_date+(server_date-last_modified_time)*factor

server_date:快取和伺服器會話時間

factor:比例數

廣告商的困勁1.快取清楚

2.快取日誌

3.命中計數

App PHP快取抓取http快取

解決方案方案分為兩部分 業務線中讀取php快取,寫入redis 在指令碼中,取出redis快取 寫入log檔案 如下。var繼承的子類如有構造方法 記得呼叫父類方法 驗證登入 public function construct 記錄日誌 public function destruct page層使...

前端快取之HTTP快取

說真的,當自己還很小白的時候,明明修改了js的內容了,但是就是沒有載入成功,那時候感覺好神奇,好沒道理。後來知道了這是因為快取的原因。說實話,現在基於各種框架的開發,基本上沒有在業務 過程中關注快取的事情了,當然,不包括使用localstorage和cookie。今天自己學習了一些關於前端快取的東西...

前端快取總結 HTTP快取

在前端面試中,可能或多或少都會被提及快取問題,而這個問題大多數都是作為業務中不得不考慮的乙個效能優化點,如果平時沒有怎麼關注或是特意去了解這塊的童鞋們,可能就是不太了解其中的原由,那麼今天我們就這個快取問題來細細分析,幫助一些還不是太明白的或是剛入門的前端童鞋們梳理梳理,理解理解,那就話不多說,開始...