文章自於個人我的博客html
使用緩存的目的就是在於減小計算,IO,網絡等時間,能夠快速的返回,特別是流量比較大的時候,能夠節約不少服務器帶寬和壓力。web
一個請求從緩存的方面來講,有三個過程。chrome
Expires,http 1.0版本定義的response頭部,定義過時時間,若是本地時間發現超過過時時間,就會向服務器請求,進行文件新鮮度檢測。可是會有一個問題,就是本地的操做系統時間可能誤差比較大,致使緩存時間過長或者永遠都緩存不了。瀏覽器
Cache-control: max-age,http 1.1 版本定義的response頭部,就是爲了解決操做系統時間與服務器時間相差太大問題。文件緩存存活時間,請求完畢的時候,會記錄本地的時間。再次請求的時候,此時時間減去最初記錄時間,若是時間大於max-age,就會進行文件新鮮度檢測。 緩存
本地緩存過時,緩存和服務器文件可能同樣,也有可能不同。若是同樣的話,就沒有必要返回內容。若是不同,就返回內容,就至關於一次新的請求。服務器
怎麼判斷文件是否一致呢?如今的作法經過文件生成時間或者對文件進行MD5值計算。網絡
Last-Modified,文件生成時間或者最後修改時間。下一次請求的頭部,添加If-Modified-Since,值是上次respone頭部的Last-Modified值,和服務器進行對比,若是同樣的話,直接返回304,數據內容爲空。【這裏也會存在一個問題,若是文件按期更新,可是文件內容不更新,豈不是白白耗費流量。】工具
Etag , 服務器端對文件計算出來的一個值。下一次請求的頭部,添加If-None-Match,和服務器進行對比,若是同樣的話,直接返回304,數據內容爲空。spa
至關於一次新的請求,狀態是200.操作系統
經過輸出4個頭部,來控制緩存,減小壓力,不只能夠節省服務器和寬帶資源,對用戶的體驗提高也是很是有幫組的。
總體上,能夠看到可能出現的狀況。200(from cache,無請求),304(僅僅是頭部交換,沒有response body返回),200(一次完整的請求,包含response body)。
轉載請註明:萬馬奔騰 » http頭部如何對緩存的控制