日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

浏览器缓存机制,强缓存,弱缓存

發布時間:2024/1/8 HTML 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浏览器缓存机制,强缓存,弱缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

      • web緩存類型
      • 瀏覽器緩存規則:
      • 瀏覽器緩存的控制
        • cache-control總結
        • Expires
        • Last-modified & If-modified-since
        • Etag & & If-None-Match
      • 瀏覽器緩存流程
      • 為什么要有etag?
      • 哪些請求不能被緩存?
      • 用戶操作行為與緩存的關系
      • HTTP狀態碼及區別

web緩存類型

  • 數據庫數據緩存
  • 服務器端緩存
  • 瀏覽器端緩存
  • web應用層緩存
  • 下面著重關注一下瀏覽器緩存

    瀏覽器緩存規則:

  • 新鮮度(過期機制):也就是緩存副本有效期。一個緩存副本必須滿足以下任一條件,瀏覽器會認為它是有效的,足夠新的,而直接從緩存中獲取副本并渲染:
    • 含有完整的過期時間控制頭信息(HTTP協議報頭),并且仍在有效期內
    • 瀏覽器已經使用過這個緩存副本,并且在一個會話中已經檢查過新鮮度
  • 校驗值(驗證機制):服務器返回資源的時候有時在控制頭信息帶上這個資源的實體標簽Etag(Entity Tag),它可以用來作為瀏覽器再次請求過程的校驗標識。如過發現校驗標識不匹配,說明資源已經被修改或過期,瀏覽器需求重新獲取資源內容。
  • 瀏覽器緩存的控制

  • 使用HTML的 Meta 標簽
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  • 使用緩存有關的HTTP消息報頭
  • cache-control總結

  • cache-control: max-age
    max-age(單位為s)指定設置緩存最大的有效時間,定義的是時間長短。當瀏覽器向服務器發送請求后,在max-age這段時間里瀏覽器就不會再向服務器發送請求了。我們來找個資源看下。比如QQ推廣上的css資源,max-age=3600,也就是說緩存有效期為3600秒(也就是1h)。于是在1天內都會使用這個版本的資源,即使服務器上的資源發生了變化,瀏覽器也不會得到通知。

  • cache-control: max-age=xxxx,public
    客戶端和代理服務器都可以緩存該資源;
    客戶端在xxx秒的有效期內,如果有請求該資源的需求的話就直接讀取緩存,statu code:200 ,如果用戶做了刷新操作,就向服務器發起http請求

  • cache-control: max-age=xxxx,private
    只讓客戶端可以緩存該資源;代理服務器不緩存
    客戶端在xxx秒內直接讀取緩存,statu code:200

  • cache-control: max-age=xxxx,immutable
    客戶端在xxx秒的有效期內,如果有請求該資源的需求的話就直接讀取緩存,statu code:200 ,即使用戶做了刷新操作,也不向服務器發起http請求

  • cache-control: no-cache
    跳過設置強緩存,但是不妨礙設置協商緩存;一般如果你做了強緩存,只有在強緩存失效了才走協商緩存的,設置了no-cache就不會走強緩存了,每次請求都回詢問服務端。

  • cache-control: no-store
    不緩存,這個會讓客戶端、服務器都不緩存,也就沒有所謂的強緩存、協商緩存了。

  • Expires

    緩存過期時間,用來指定資源到期的時間,是服務器端的具體的時間點。也就是說, Expires=max-age + 請求時間 ,需要和Last-modified結合使用。但cache-control的優先級更高。Expires是Web服務器響應消息頭字段,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數據,而無需再次請求。

    Last-modified & If-modified-since

    服務器端文件的最后修改時間,需要和cache-control共同使用,是檢查服務器端資源是否更新的一種方式。當瀏覽器再次進行請求時,會向服務器傳送If-Modified-Since報頭,詢問Last-Modified時間點之后資源是否被修改過。如果沒有修改,則返回碼為304,使用緩存;如果修改過,則再次去服務器請求資源,返回碼和首次請求相同為200,資源為服務器最新資源。

    Etag & & If-None-Match

    根據實體內容生成一段hash字符串,標識資源的狀態,由服務端產生。瀏覽器會將這串字符串傳回服務器,驗證資源是否已經修改,如果沒有修改,則返回304

    瀏覽器緩存流程

    為什么要有etag?

    你可能會覺得使用 Last-Modified 已經足以讓瀏覽器知道本地的緩存副本是否足夠新,為什么還需要 Etag(實體標識)呢?HTTP1.1中Etag的出現主要是為了解決幾個 Last-Modified 比較難解決的問題:

    • Last-Modified 標注的最后修改只能精確到秒級,如果某些文件在1秒鐘以內,被修改多次的話,它將不能準確標注文件的新鮮度

    • 如果某些文件會被定期生成,當有時內容并沒有任何變化,但 Last-Modified 卻改變了,導致文件沒法使用緩存

    • 有可能存在服務器沒有準確獲取文件修改時間,或者與代理服務器時間不一致等情形

    Etag是服務器自動生成或者由開發者生成的對應資源在服務器端的唯一標識符,能夠更加準確的控制緩存。Last-Modified與ETag是可以一起使用的,服務器會優先驗證ETag,一致的情況下,才會繼續比對Last-Modified,最后才決定是否返回304。

    哪些請求不能被緩存?

    無法被瀏覽器緩存的請求:

  • HTTP信息頭中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0等告訴瀏覽器不用緩存的請求
  • 需要根據Cookie,認證信息等決定輸入內容的動態請求是不能被緩存的
  • 經過HTTPS安全加密的請求(有人也經過測試發現,ie其實在頭部加入Cache-Control:max-age信息,firefox在頭部加入Cache-Control:Public之后,能夠對HTTPS的資源進行緩存,參考《HTTPS的七個誤解》)
  • POST請求無法被緩存
  • HTTP響應頭中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的請求無法被緩存
  • 用戶操作行為與緩存的關系

    • 普通刷新 – 當按下F5或者點擊刷新按鈕來刷新頁面的時候,瀏覽器將繞過本地緩存來發送請求到服務器, 此時, 協商緩存是有效的
    • 強制刷新 – 當按下ctrl+F5來刷新頁面的時候, 瀏覽器將繞過各種緩存(本地緩存和協商緩存), 直接讓服務器返回最新的資源
    • 回車或轉向 – 當在地址欄上輸入回車或者按下跳轉按鈕的時候, 所有緩存都生效

    HTTP狀態碼及區別

    狀態類型說明
    200form memory cache不請求網絡資源,資源在內存當中,一般腳本、字體、圖片會存在內存當中
    200form disk cache不請求網絡資源,在磁盤當中,一般非腳本會存在內存當中,如css等
    200資源大小數值從服務器下載最新資源
    304報文大小請求服務端發現資源沒更新,使用本地資源

    總結

    以上是生活随笔為你收集整理的浏览器缓存机制,强缓存,弱缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。