Cache-Control頭

介紹

Cache-Control頭在HTTP中有必定的難度,第一它既能夠用於請求頭,也能夠用於響應頭(這裏主要將響應緩存)。第二,它控制着兩個緩存,本地緩存:指客戶端本地及其中的緩存(大多指瀏覽器緩存),可是它徹底不受控制,一般瀏覽器會本身決定是否把某些內容放到緩存中,同時用戶也能夠本身處理緩存(清空)。共享緩存,處於客戶端和服務器之間的緩存。既CDN。開發者能夠絕對的控制。數據庫

代碼示例

1. Cache-Control: public max-age=3600
2. Cache-Control: private immutable
3. Cache-Control: no-cache
4. Cache-Control: public max-age=3600 s-maxage=7200
5. Cache-Control: public max-age=3600 proxy-revalidate

屬性

首先,Cache-Control有三種屬性:緩衝能力、過時時間和二次驗證。瀏覽器

緩衝能力
  • private:表示它只應該存在本地緩存;
  • public:表示它既能夠存在共享緩存,也能夠被存在本地緩存;
  • no-cache:表示不管是本地緩存仍是共享緩存,在使用它之前必須用緩存裏的值來從新驗證(並非表示不能使用緩存)。
  • no-store:表示不容許被緩存緩存

    過時時間
  • max-age= :設置緩存時間,設置單位爲秒。本地緩存和共享緩存均可以。
  • s-maxage= :覆蓋max-age屬性。只在共享緩存中起做用。 安全

    二次驗證(表示精細控制)
  • immutable:表示文檔是不能修改的
  • must-revalidate:表示客戶端(瀏覽器)必須檢查代理服務商是否存在,即便它已經本地緩存了也要檢查
  • proxy-revalidata:表示共享緩存(CDN)必需要檢查源是否存在,即便已經存在了緩存。服務器

對示例代碼的解釋
  1. 本地緩存和CDN均緩存一小時
  2. 不能緩存在CDN,只能緩存在本地。而且一旦緩存了,則不能唄更新;
  3. 不能緩存,若是必定要緩存的話,確保對其進行二次驗證;
  4. 本地緩存一小時,CDN上緩存2小時;
  5. 本地和CDN均被緩存一小時,可是若是CDN收到請求,則儘管已經緩存了一小時,仍是要檢查源中文檔是否已經被改變。
關於請求頭中的Cache-Control

cache-Control不是響應頭獨有的,在有些請求頭中會帶有Cache-Control,可是咱們爲何不多在請求頭中見到這個呢?(也不多見到這方面的資料)緣由就是:他很是的危險!代理

咱們知道,HTTP中的PUT方法是具備很大的風險性的,由於它有可能使服務端的資源被不安全的客戶端修改,請求中的Cache-Control也是同樣,來跟我仔細思考:前面說到CDN是爲了加快訪問同時減輕服務器的壓力,甚至是保護底層的數據庫,那麼試想,若是客戶端利用Cache-Control強行的關閉掉CDN直接把請求發送到服務器上,此時攻擊者就可與擊穿CDN!因此說他具備很大的風險性,實現這個規範的服務器少之又少!code

相關文章
相關標籤/搜索