為什麼使用快取
瀏覽器中使用快取的流程
瀏覽器發起請求
- 檢查是否有快取
- 有Pragma欄位 no-cache 強制請求 新資源
- 有快取並且沒有Pragma,先判斷快取是否過期(Cache-Control 優先於 Expires),沒有過期就使用快取
- 快取有效時間過期了,檢視是否使用了Eatg 和 Last-Modified 頭部
- 傳送 If-none-Match 和 If-Modified-Since 去驗證是否快取還能繼續使用(可能快取到期了,但是服務端沒有修改,而資源又比較大,通過校驗可以減少網路傳輸)
- 資源沒有修改就使用快取
- 資源修改了就返回新的資源
快取使用的一些注意點
Expires
- 一般使用Cache-Control和Expires共存,主要是為了相容http1.0
- Expires返回的是伺服器時間,需要考慮伺服器與客戶端的時間同步(時區等)
- 過期之後重新返回的響應中要加入新的Expires
Cache-Control
- max-age 過期時間是一個時間段,從接受到這個響應之後開始生效,過期之後任然可以使用這個時間段
- max-age 和 Expires 共存的時候使用max-age
- no-cache 表示可以快取,但是在使用快取之前需要向伺服器驗證
- no-store 不快取
Last-Modified
Etag
請求的來源
修訂檔名
為了避免304,實際檔案發生了修改,但是還是去訪問快取的情況。