爲了提升站點的訪問速度,使用緩存來優化。緩存主要分爲 強緩存和協商緩存。node
主要分爲last-modified、etag。下面我主要經過代碼修改來表現各個緩存之間的區別。先討論協商緩存。last-modified表示文件的修改日期,若是文件作了修改那就應該從新獲取文件。last-modified是文件修改後根據服務器的時間生成。 web
若是咱們修改了文件則會從新獲取,status就爲200 apache
再次刷新就會返回304表示緩存已是最新不須要再更新。 請求中會詢問相關文件修改時間(If-Modified-Since)瀏覽器
請求 緩存
響應 服務器
**ETag:**是一個能夠與Web資源關聯的記號(token)負載均衡
若是文件被替換,就會生成惟一的etag。測試
替換前的文件 優化
替換後的文件 this
PS: 若是是使用了多臺服務器作負載均衡的話,會出現etag不一致問題。Apache 的默認ETag的值老是由文件的索引節點(Inode)、大小(Size)、最後修改時間(MTime)決定,咱們只須要去掉Inode便可
強緩存相比協商緩存更爲完全,在協商緩存下瀏覽器不會對服務器發起請求。
**強緩存:**主要分爲expires和cache-control
Expires: 表示存在時間,容許客戶端在這個時間以前不去檢查(發請求),等同max-age的 效果。可是若是同時存在,則被Cache-Control的max-age覆蓋。 格式: Expires :時間,後面跟一個時間或者日期,超過這個時間後緩存失效。也就是瀏覽器發出請求以前,會檢查這個時間是否失效,若失效,則瀏覽器會從新發出請求。
開啓apache expires_mod以後,瀏覽器在第一次將資源請求以後會緩存。
Cache-Control Cache-Control 在 HTTP 響應頭中,用於指示代理和 UA 使用何種緩存策略。好比:
cache-control中設置max-age 爲最長的緩存時間。在該時間內則使用緩存。
設置爲no-cache以後則不會再進行緩存。
在使用apache對瀏覽器緩存進行測試過程當中發現。在不設置 cache-control的狀況下,瀏覽器會根據自身的狀況去取捨相關的緩存,能夠從這查看。若是你們在服務器配置過程當中發現,本身沒有配置任何的緩存信息可是瀏覽器卻緩存了資源就不用驚訝。