HTTP緩存

HTTP緩存

1.Expires(過期時間)

HTTP頭信息Expires(過期時間) 屬性是HTTP控制緩存的基本手段,這個屬性告訴緩存器:相關副本在多長時間內是新鮮的。過了這個時間,緩存器就會向源服務器發送請求,檢查文檔是否被修 改。幾乎所有的緩存服務器都支持Expires(過期時間)屬性;
大部分Web服務器支持你用幾種方式設置Expires屬性;一般的:可以設計一個絕對時間間隔:基於客戶最後查看副本的時間(最後訪問時間)或者根據服務器上文檔最後被修改的時間。

注意:HTTP的日期時間必須是格林威治時 間(GMT),而不是本地時間。舉例:Expires: Thu, 19 Jul 2018 02:39:43 GMT

2.Cache-Control

Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control並不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各個消息中的指令含義如下:
  Public指示響應可被任何緩存區緩存。
  Private指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這允許服務器僅僅描述當用戶的部分響應消息,此響應消息對於其他用戶的請求無效。
  no-cache指示請求或響應消息不能緩存
  no-store用於防止重要的信息被無意的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存。
  max-age指示客戶機可以接收生存期不大於指定時間(以秒爲單位)的響應。
  min-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
  max-stale指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那麼客戶機可以接收超出超時期指定值之內的響應消息。

關於no-cache  no-store的區別


綜述:
Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control並不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。網頁的緩存通過HTTP消息頭中的“Cache-control”來控制,常見的取值有private、no-cache、max-age、must-revalidate等,默認爲private。

以下兩種方式是瀏覽器發送請求到服務器後判斷文件是否 已經修改過,如果沒有修改過就只發送一個304回給瀏覽器,告訴瀏覽器直接從自己本地的緩存取數據;如果修改過那就整個數據重新發給瀏覽器。

3.Last-Modified/If-Modified-Since

在http中Last-Modified 與If-Modified-Since 都是用於記錄頁面最後修改時間的 HTTP 頭信息,注意,在這 Last-Modified 是由服務器往客戶端發送的 HTTP 頭,也就是response的,另一個 If-Modified-Since是由客戶端往服務器發送的頭,request的頭。

4.ETag/If-None-Match

它的原理是這樣的,當瀏覽器請求服務器的某項資源(A)時, 服務器根據A算出一個哈希值(3f80f-1b6-3e1cb03b)並通過 ETag 返回給瀏覽器,瀏覽器把"3f80f-1b6-3e1cb03b" 和 A 同時緩存在本地,當下次再次向服務器請求A時,會通過類似 If-None-Match: "3f80f-1b6-3e1cb03b" 的請求頭把ETag發送給服務器,服務器再次計算A的哈希值並和瀏覽器返回的值做比較,如果發現A發生了變化就把A返回給瀏覽器(200),如果發現A沒有變化就給瀏覽器返回一個304未修改。這樣通過控制瀏覽器端的緩存,可以節省服務器的帶寬,因爲服務器不需要每次都把全量數據返回給客戶端。

Etag的優先級高於Last-Modified

1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章