HTTPS快取

是你大凱哥呢發表於2019-04-20

https快取

  • 強制快取 當快取資料庫中已有所請求的資料時,客戶端直接從資料庫讀取資料。當快取資料庫中沒有所請求的資料時,客戶端才會從服務端獲取

HTTPS快取

  • 協商快取 客戶端會先從快取資料庫中獲取到一個快取資料的標識,得到標識後請求服務端驗證標識是否失效,如果沒有失效服務端會返回304,此時客戶端再從快取中讀取資料,如果失效,服務端會返回跟新的資料。

    HTTPS快取

  • 強制快取伺服器響應的header中會用兩個欄位來表明-Expires和Cach-Control。

    • Expires的值為伺服器資料到期時間,由於服務端的時間和客戶端的時間有誤差會導致快取命中的誤差。
    • Cache-Control
      • private:客戶端可以快取
      • public 客戶端和代理伺服器都可以快取
      • max-age=t:快取內容在t秒後失效
      • no-cache:需要使用協商快取(伺服器)來驗證快取資料
      • no-store:所有資料都不會快取
  • 協商快取是隻需要對比是否可以進行快取,瀏覽器第一次請求資料時,伺服器會將快取標識與資料一起響應給客戶端,當瀏覽器再次請求時,客戶端先將快取標誌傳送給伺服器,伺服器根據此標識進行判斷,若未失效返回304,流浪器可以使用快取資料。接下了解下快取標識

    • Last-Modified : 伺服器在響應請求時,會告訴瀏覽器資源的最後修改時間。
    • if-Modified-Since: 瀏覽器再次請求資料時,會將請求頭包含次欄位,後面跟著在快取中獲得的最後修改時間。伺服器發現有此欄位時,和請求資源的最後修改時間進行比對。
      • 如果真被修改了那麼開始響應一個整體,伺服器返回:200 OK
      • 如果沒有被修改只響應header,伺服器返回304 NotModified
    • if-Unmodified-Since:從某個時間點算起,檔案是否沒有被修改
      • 如果沒有被修改:則開始繼續傳輸檔案,伺服器返回200
      • 如果檔案被修改:則不傳輸,伺服器返回:412 Precondition Faild(預處理錯誤)
    • Etag HTTP1.1推出的。伺服器響應時,通過次欄位告訴瀏覽器當前資源在伺服器生成的唯一標識
      • If-None-Match:再次請求伺服器時,瀏覽器的請求報文頭部會包含此欄位,後面的值為在快取中獲取的標識。伺服器接收到次報文後發現If-None-Match則與被請求資源的唯一標識進行對比。
        • 不同,說明資源被改動過,則響應整個資源內容,返回狀態碼200
        • 相同,說明資源無心修改,則響應header,瀏覽器直接從快取中獲取資料資訊。返回狀態碼304

相關文章