天天看點

[日常] HTTP的緩存

web緩存:
1.可以自動儲存常見文檔副本的HTTP裝置,當web請求抵達緩存時,如果存在緩存副本,就直接從本地儲存設備傳回,而不是去源伺服器擷取

2.緩存命中和未命中

3.HTTP再驗證,檢測伺服器上的内容是否發生了變化,新鮮度檢測規則。緩存對副本進行再驗證時,會向伺服器發送一個小的再驗證請求,如果沒變化,伺服器會傳回304 Not Modified,get請求中添加if-modified-since會進行再驗證

4.緩存命中率:由緩存提供服務的占比,命中率與緩存大小,使用者興趣相似點,資料的變化,緩存配置等有關,40%的命中率是合理的,對降低整體時延很有好處

5.位元組命中率:緩存提供的位元組流量在傳輸流量中的占比,對節省帶寬很有利

6.私有緩存,比如web浏覽器

7.共有代理緩存,實作階層化的多級緩存很有意義

8.網狀緩存,内容路由,對等緩存;有些不是簡單的層次結構而是建構複雜的網狀關系緩存,這些代理緩存也可以稱為内容路由器,ICP和HTCP協定擴充了HTTP的對等緩存兄弟緩存

9.緩存處理步驟:接收請求=>解析請求=>查詢本地副本(擷取源伺服器)=>新鮮度檢測=>建立響應=>發送響應=>記錄日志

10.文檔過期:伺服器傳回頭資訊Cache-Control 和Expires,為文檔附加過期時間。Cache-Control:max-age=484200是相對時間,儲存的秒數,用的更多一些

11.伺服器再驗證:If開頭的條件方法頭資訊進行再驗證
    If-Modified-Since:日期
    If-None-Match:實體标簽再驗證

12.
打開新視窗   如果指定cache-control的值為private、no-cache、must-revalidate,那麼打開新視窗通路時都會重新通路伺服器。而如果指定了max-age值,那麼在此值内的時間裡就不會重新通路伺服器,例如:Cache-control: max-age=5 表示當通路此網頁後的5秒内再次通路不會去伺服器.
在位址欄回車  如果值為private或must-revalidate,則隻有第一次通路時會通路伺服器,以後就不再通路。如果值為no-cache,那麼每次都會通路。如果值為max-age,則在過期之前不會重複通路。
按後退按扭   如果值為private、must-revalidate、max-age,則不會重通路,而如果為no-cache,則每次都重複通路.
按重新整理按扭   無論為何值,都會重複通路.
Cache-Control:no-cache就表示不緩存
13.
apache的配置:
3.注釋掉apache配置檔案中的:
#ExpiresDefault A0
#Header set Cache-Control "private, must-revalidate, max-age=0, proxy-revalidate, no-transform"
#Header set Pragma "no-cache"

ExpiresActive On
ExpiresDefault "access plus 300 seconds"

14.php檔案中的響應頭:
header('Cache-Control: max-age=' . $this->expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $this->expires) . ' GMT');
header('Pragma: '); // unset Pragma header      

繼續閱讀