前言
今天做專案的時候遇到一個問題,就是在ie11中 新增一條新的訊息後頁面重新整理後,並沒有看到新增的訊息,於是開啟控制檯發現
304 Not Modified 加時間戳沒用
於是趕緊聯絡後臺大佬能不能把cache-control改成Cache-Control:no-cache試試
然而並沒什麼卵用,然後自己研究。
瀏覽器快取機制
- 當前快取是否過期?
- 伺服器中的檔案是否有改動?
如何判斷快取的過期以及檔案的變動?
主要的方式有兩種,這兩種都是設定請求頭中的某一個欄位來實現的: 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