探討下爲何設置了Cache-Control:no-cache 服務器仍是返回304 Not Modified ?

前言

今天作項目的時候遇到一個問題,就是在ie11中 新增一條新的消息後頁面刷新後,並無看到新增的消息,因而打開控制檯發現前端

304 Not Modified 加時間戳沒用瀏覽器

因而趕忙聯繫後臺大佬能不能把cache-control改爲Cache-Control:no-cache試試緩存

然而並沒什麼卵用,而後本身研究。服務器

瀏覽器緩存機制

  1. 當前緩存是否過時?
  2. 服務器中的文件是否有改動?

如何判斷緩存的過時以及文件的變更?

主要的方式有兩種,這兩種都是設定請求頭中的某一個字段來實現的: 一、Expires; 二、Cache-Control。因爲Cache-Control設置後優先級比前者高,此次做者就先說下經過Cache-Control來控制緩存。代理

常見取值: no-cachecdn

若是request headers中,Cache-Control爲no-cache。表示無論服務端有沒有設置Cache-Control,都必須從從新去獲取請求。blog

max-age=xxx:緩存的內容將在 xxx 秒後失效資源

max-age=0開發

max-age=0表示無論response怎麼設置,在從新獲取資源以前,先檢驗ETag/Last-Modifiedit

無論是max-age=0仍是no-cache,都會返回304(資源無修改的狀況下),no-store纔是真正的不進行緩存。

private: 客戶端能夠緩存(默認)

public: 客戶端和代理服務器均可緩存(前端的同窗,能夠認爲public和private是同樣的)

no-store: 全部內容都不會緩存,強制緩存,對比緩存都不會觸發(對於前端開發來講,緩存越多越好,so...基本上和它說886

相關文章
相關標籤/搜索