探討下為什麼設定了Cache-Control:no-cache 伺服器還是返回304 Not Modified ?

李二狗子發表於2018-12-27

前言

今天做專案的時候遇到一個問題,就是在ie11中 新增一條新的訊息後頁面重新整理後,並沒有看到新增的訊息,於是開啟控制檯發現

探討下為什麼設定了Cache-Control:no-cache 伺服器還是返回304 Not Modified ?

304 Not Modified 加時間戳沒用

於是趕緊聯絡後臺大佬能不能把cache-control改成Cache-Control:no-cache試試

然而並沒什麼卵用,然後自己研究。

瀏覽器快取機制

  1. 當前快取是否過期?
  2. 伺服器中的檔案是否有改動?

如何判斷快取的過期以及檔案的變動?

主要的方式有兩種,這兩種都是設定請求頭中的某一個欄位來實現的: 1、Expires; 2、Cache-Control。由於Cache-Control設定後優先順序比前者高,這次作者就先說下通過Cache-Control來控制快取。

常見取值: no-cache

如果request headers中,Cache-Control為no-cache。表示不管服務端有沒有設定Cache-Control,都必須從重新去獲取請求。

max-age=xxx:快取的內容將在 xxx 秒後失效

max-age=0

max-age=0表示不管response怎麼設定,在重新獲取資源之前,先檢驗ETag/Last-Modified

不管是max-age=0還是no-cache,都會返回304(資源無修改的情況下),no-store才是真正的不進行快取。

private: 客戶端可以快取(預設)

public: 客戶端和代理伺服器都可快取(前端的同學,可以認為public和private是一樣的)

no-store: 所有內容都不會快取,強制快取,對比快取都不會觸發(對於前端開發來說,快取越多越好,so...基本上和它說886

相關文章