http web快取總結

2021-09-13 02:20:36 字數 1886 閱讀 1643

快取讀取順序:首先讀取本地快取,如果條件滿足就取本地快取,否則往後走**快取,同理,條件滿足就是從**快取取資源(可能存在多級**快取)

如果一條鏈路上的資源都不符合,那麼就去源伺服器獲取

快取優先順序:cache-control > expires > etag > last-modified

協商快取 狀態碼 304

強快取優先順序高於協商快取,強快取不會詢問伺服器,直接使用快取。協商快取會詢問伺服器關於檔案的可用性

==對於傳輸過程中的中間節點,本文都稱為**伺服器,包括proxy、cdn和快取伺服器==

上述頭資訊是規範,但是很多**伺服器不按這個來

缺點:cache-control為客戶端快取,服務端更新了檔案之後,客戶端並不第一時間更新快取,這也是web開發中的常見問題

cache-control缺點的通用解決方案:在打包檔案之後,根據靜態檔案內容加上一串hash碼或者版本號,如果靜態檔案內容沒變,則hash不會變,反之,靜態檔案內容變化之後,hash碼變化,則靜態資源url發生變化,可以更新客戶端快取

舉例我司的處理:可以看到,devtools的size欄,提示出from memory cache,即讀取瀏覽器本地快取

示例**:這裡是用模板來載入的,support來填充,猜測可以在初始化請求的時候,通過請求配置介面,拿到對應的web資源的版本號的介面或者配置檔案,然後再靜態資源去載入之前,將對應的版本號填充到對應的src或者link中

資源上次修改時間,主要配合if-modified-since或者if-unmodified-since使用:如果請求了乙個資源的respose header裡面有last-modified頭資訊指定了乙個時間,下一次瀏覽器發起請求的時候,通過if-modified-since或者if-unmodified-since(通常使用if-modified-since,if-unmodified-since很少用)帶上那個時間,帶到伺服器,伺服器讀取並對比這個資源上次修改的時間,如果一致,則代表資源沒有被修改過,那麼瀏覽器可以繼續使用快取,反之快取不能使用

ps:如果資源是存在資料庫的,可以給資源加上乙個update-at的字段加上修改時間作為last-modified時間返回給瀏覽器
更加嚴格的驗證方式,通過資料簽名的方式,根據資源的內容產生乙個唯一的簽名,如果資源的內容產生了修改,那麼簽名就會更新,任何的修改都會導致簽名不一致,常用方式是對資源的內容進行hash計算產生簽名來標記資源。

配合if-match或者if-non-match使用,下一次瀏覽器發請求會帶上if-match或者if-non-match頭,頭裡面的值就是服務端上一次給出的etag簽名,然後伺服器對比簽名是否一致

http code 304資源沒有修改,可以直接讀取快取,及時這時候服務端有了新的返回,也會被瀏覽器忽略,直接讀取快取資料(寫個介面,而不是靜態資源檔案來驗證一下)

tips:

chrome的devtools,當把disable cache勾選上之後,瀏覽器就不往伺服器傳送關於快取的頭資訊了,這時候只能從伺服器讀取最新的資料

快取對比localstorage: 快取檔案不用自己去控制localstorage的讀寫呢

C Socket實現Http WEB伺服器

c socket實現http web伺服器 2010年03月22日 www的工作基於客戶機 伺服器計算模型,由web 瀏覽器 客戶機 和web伺服器 伺服器 構成,兩者之間採用超文字傳送協議 http 進行通訊,http協議的作用原理包括四個步驟 連線,請求,應答。根據上述http協議的作用原理,本...

前端快取總結 HTTP快取

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

快取使用總結

localcache memcache redis 區別對比 快取型別 使用場景 使用示例 優點缺點 localcache 少量資料,對應用程式唯讀或讀多寫少 後台配置,分割槽資訊 無需網路開銷,訪問速度最快 集群機器資料不同步 memcache 海量資料,高併發讀寫 記憶體占用相對redis少,適...