http頭部如何對緩存的控制

文章自於個人我的博客html

使用緩存的目的就是在於減小計算,IO,網絡等時間,能夠快速的返回,特別是流量比較大的時候,能夠節約不少服務器帶寬和壓力。web

一個請求從緩存的方面來講,有三個過程。chrome

本地檢查緩存是否過時

Expires,http 1.0版本定義的response頭部,定義過時時間,若是本地時間發現超過過時時間,就會向服務器請求,進行文件新鮮度檢測。可是會有一個問題,就是本地的操做系統時間可能誤差比較大,致使緩存時間過長或者永遠都緩存不了。瀏覽器

Cache-control: max-age,http 1.1 版本定義的response頭部,就是爲了解決操做系統時間與服務器時間相差太大問題。文件緩存存活時間,請求完畢的時候,會記錄本地的時間。再次請求的時候,此時時間減去最初記錄時間,若是時間大於max-age,就會進行文件新鮮度檢測。  緩存

  •  若是瀏覽器使用本地緩存,經過chrome調試工具,能夠看到,狀態是200,size 是from cache。這個時候是沒有http請求。
  •  若是緩存不存在或者沒有定義這兩個頭部,直接進行下一步新鮮度檢測。
  •  若是兩個都定義的話,Expires無效。
  •  防止瀏覽器緩存,咱們須要把兩個頭部都設置爲0.

服務器檢測文件新鮮度

本地緩存過時,緩存和服務器文件可能同樣,也有可能不同。若是同樣的話,就沒有必要返回內容。若是不同,就返回內容,就至關於一次新的請求。服務器

怎麼判斷文件是否一致呢?如今的作法經過文件生成時間或者對文件進行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頭部如何對緩存的控制

相關文章
相關標籤/搜索