文章自于我的個人部落格
使用快取的目的就是在於減少計算,io,網路等時間,可以快速的返回,特別是流量比較大的時候,可以節約很多伺服器頻寬和壓力。
乙個請求從快取的方面來說,有三個過程。
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,資料內容為空。
相當於一次新的請求,狀態是200.
通過輸出4個頭部,來控制快取,減少壓力,不僅可以節省伺服器和寬頻資源,對使用者的體驗提公升也是非常有幫組的。
整體上,可以看到可能出現的情況。200(from cache,無請求),304(僅僅是頭部交換,沒有response body返回),200(一次完整的請求,包含response body)。
http頭部快取設定
200 from cache 不設快取時這兩個都需要置0,只有get可以被快取 http1.0的response頭,設定過期時間,過期是會做資源更新檢測。本地時間和伺服器有差異問題 http1.1的response頭,本地時間的差值如果大於max age,超時時做資源更新檢測。304 not mod...
HTTP與快取相關的頭部
瀏覽器發起請求 檢查是否有快取 有pragma欄位 no cache 強制請求 新資源 有快取並且沒有pragma,先判斷快取是否過期 cache control 優先於 expires 沒有過期就使用快取 快取有效時間過期了,檢視是否使用了eatg 和 last modified 頭部 傳送 if...
HTTP的快取控制
1.快取的分類 1 快取分為服務端側 server side,比如 nginx apache 和客戶端側 client side,比如 web browser 2 服務端快取又分為 伺服器快取 和 反向 伺服器快取 也叫閘道器快取,比如 nginx反向 squid等 其實廣泛使用的 cdn 也是一種...