協商快取
瀏覽器與伺服器通訊的方式為應答模式。
瀏覽器發起http請求——伺服器響應該請求
瀏覽器第一次向伺服器發起該請求後拿到請求結果,將請求結果和快取標識存入瀏覽器快取,瀏覽器對於快取的處理是根據第一次請求資源時返回的響應頭決定的
瀏覽器快取的關鍵:瀏覽器每次發起請求,都會首先在瀏覽器快取中查詢該請求的結果和快取標識/瀏覽器每次拿到請求結果都會將該結果和快取標識存入瀏覽器快取中
頁面的快取狀態是由header決定的,header的引數有四種
不會向伺服器傳送請求,直接從快取中讀取資源,返回200狀態碼,通過expires和cache-control實現
強快取過程
瀏覽器向瀏覽器快取發起http請求cache-control瀏覽器快取中不存在結果和快取標識
瀏覽器向伺服器傳送http請求
伺服器返回請求結果和快取標識
瀏覽器把請求結果和快取標識存入瀏覽器快取
max-age(單位是s)指定設定快取最大的有效時間,定義的是時間長短。當瀏覽器向伺服器傳送請求後,在max-age這段時間裡瀏覽器就不會再向伺服器傳送請求了,會命中強快取
public指定響應會被快取,客戶端和**伺服器都可以。如果沒有指定是public或者private,就預設為public
private響應只作為私有的快取,不能在使用者間共享,只有客戶端可以快取,要求http認證,只能被單個使用者快取,**伺服器不能快取他
no-cache指客戶端快取內容,是否使用快取則需要經過協商快取來驗證決定。
no-store絕對禁止快取,需要每次都向伺服器請求
詳細指令
指令作用
public
表示響應頭可以被客戶端和**伺服器快取
private
表示響應只可以被客服端快取
max-age=30
快取30s後就過期,需要重新請求
s-maxage=30
覆蓋max-age,作用一樣,只是在**伺服器中生效
no-store
不快取任何響應
no-cache
資源被快取,但是立即失效,下次會發起請求驗證資源是否過期
max-stale=30
30秒內,即使快取過期,也使用該快取
min-fresh=30
希望在30s內獲取最新的響應
expires
cache-control和expires的區別協商快取就是強制快取失效後,瀏覽器攜帶快取標識向伺服器發起請求,由伺服器根據快取標識據欸的那個是否使用快取的過程
協商快取的兩種情況
協商快取生效,返回304和not modified
瀏覽器發起http請求,瀏覽器快取請求結果失敗,只返回快取標識瀏覽器攜帶著該資源的快取標識,向伺服器發起http請求
伺服器發現資源沒更新,返回not modified和304
瀏覽器向瀏覽器快取獲取該請求的快取結果
瀏覽器快取返回給瀏覽器該結果
協商快取失效,返回200和請求結果
瀏覽器向瀏覽器快取發起http請求瀏覽器快取結果失效,只返回快取標識
瀏覽器向伺服器傳送http請求攜帶該快取標識
伺服器發現資源更新了,重新返回請求結果,和200
瀏覽器把請求結果和快取標識存入快取中
last-modified和if-modified-since
etag和if-none-match
使用http1.1etag可以解決last-modified存在的一些問題
etag是伺服器響應請求時,返回當前資源檔案的乙個唯一標識(由伺服器生成),只要資源有變化,etag就會重新生成
伺服器只需要比較if-none-match和自己伺服器上該資源是否一致
etat和last-modified對比
etag精確度優於last-modified
效能上etag遜於last-modified,因為last-modifed只需要記錄時間,而etag就需要計算hash值
優先順序上,伺服器優先考慮etag
CDN快取和瀏覽器快取
cdn的全稱是content delivery network,即內容分發網路,旨在解決網路延遲。cdn是構建在網路之上內容分發網路,依靠在各地部署的快取伺服器,通過中心平台的負載均衡 內容分發 排程等功能模組,使使用者可以就近獲取所需要的內容,從而達到降低網路用塞,提高系統訪問速度的技術。cdn的...
快取 瀏覽器快取
瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...
瀏覽器快取
1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...