簡事二三 之 http快取機制

柳菁發表於2018-09-03

http快取相關概念:

請求頭:瀏覽器向伺服器傳送請求的資料,資源

響應頭:伺服器向瀏覽器相應資料,告訴瀏覽器我是誰,我要怎麼做。如,我是nginx,給你的資源是正確的200 還是錯誤的404,我告訴你需要快取多久。

快取優先順序: pragma → cache-control → expires → ETag → last-modified

Http1.0: Pragma(已廢棄), expires

Http1.1: Cache-control, ETag, Last-Modified

http快取可以分為兩類: 強制快取,協商快取

  1. 強制快取:expires, Cache-control
    1). Expires: 快取過期時間,GMT時間,以客戶端時間作為參考
    2). Cache-control: 相對時間,屬性值分為:
    1. Private:僅允許客戶端快取
    2. Public:客戶端和代理伺服器都可以快取
    3. Max-age=xxx:快取內容將於xxx秒後失效
    4. No-cache:需要使用協商快取來驗證快取資料
    5. No-store:所有內容都不會快取,強制快取、協商快取都不會觸發

  2. 協商快取:Last-Modified, ETag
    1)Last-Modified:定義上一次修改時間,再次請求時帶請求頭if-modified-since,與伺服器進行對比
    2)ETag:加密字串,再次請求時帶請求頭if-none-match,與伺服器對比

對於強制快取,伺服器通知瀏覽器一個快取時間,在快取時間內,下次請求直接用快取,不在時間內則執行協商快取策略。

對於協商策略,將快取資訊中的ETag和Last-Modified通過請求傳送給伺服器,有伺服器校驗,返回304狀態碼時,瀏覽器直接使用快取。

瀏覽器第一次請求:

瀏覽器請求 -> 無快取 -> 向web伺服器請求 -> 請求響應,快取協商 -> 呈現

瀏覽器再次請求:

簡事二三 之 http快取機制

常見的請求頭:

簡事二三 之 http快取機制

常見的響應頭:

簡事二三 之 http快取機制


相關文章