http快取相關概念:
請求頭:瀏覽器向伺服器傳送請求的資料,資源
響應頭:伺服器向瀏覽器相應資料,告訴瀏覽器我是誰,我要怎麼做。如,我是nginx,給你的資源是正確的200 還是錯誤的404,我告訴你需要快取多久。
快取優先順序: pragma → cache-control → expires → ETag → last-modified
Http1.0: Pragma(已廢棄), expires
Http1.1: Cache-control, ETag, Last-Modified
http快取可以分為兩類: 強制快取,協商快取
- 強制快取:expires, Cache-control
1). Expires: 快取過期時間,GMT時間,以客戶端時間作為參考
2). Cache-control: 相對時間,屬性值分為:- Private:僅允許客戶端快取
- Public:客戶端和代理伺服器都可以快取
- Max-age=xxx:快取內容將於xxx秒後失效
- No-cache:需要使用協商快取來驗證快取資料
- No-store:所有內容都不會快取,強制快取、協商快取都不會觸發
- 協商快取:Last-Modified, ETag
1)Last-Modified:定義上一次修改時間,再次請求時帶請求頭if-modified-since,與伺服器進行對比
2)ETag:加密字串,再次請求時帶請求頭if-none-match,與伺服器對比
對於強制快取,伺服器通知瀏覽器一個快取時間,在快取時間內,下次請求直接用快取,不在時間內則執行協商快取策略。
對於協商策略,將快取資訊中的ETag和Last-Modified通過請求傳送給伺服器,有伺服器校驗,返回304狀態碼時,瀏覽器直接使用快取。
瀏覽器第一次請求:
瀏覽器請求 -> 無快取 -> 向web伺服器請求 -> 請求響應,快取協商 -> 呈現
瀏覽器再次請求:
常見的請求頭:
常見的響應頭: