5步了解 HTTP 緩存機制,再也不會存在疑惑(建議收藏)

2020-12-23 前端程式設計師黃哥

1、前端緩存

前端緩存可分為:http 緩存瀏覽器緩存

今天主要講的就是 http 緩存2、HTTP 緩存

什麼是 HTTP 緩存HTTP 緩存指的是,客戶端向伺服器請求數據時,會先抵達瀏覽器緩存,如果瀏覽器有這個需要請求的資源的副本,就可以直接從瀏覽器的緩存中提取這個資源,而不用花費更多時間再從對應的伺服器獲取數據。常見的 HTTP 緩存只能緩存 get 請求響應的資源HTTP 緩存都是從第二次請求開始的。第一次請求資源時,伺服器返回對應資源,並在 response header 頭中回傳資源的緩存數據;第二次請求,瀏覽器通過判斷請求參數,命中強緩存就直接 200,否則就把請求參數到 request header 頭中傳給伺服器,查看是否命中協商緩存,命中則返回 304,否則伺服器會返回全新的資源HTTP 緩存分類根據是否需要再次向伺服器發起請求來判斷分類,分為強緩存協商緩存強緩存如果生效,就無須再與伺服器發生交互協商緩存不管是否生效,都需要與伺服器發生交互強緩存 與 協商緩存 的對比:

關於強緩存強緩存在緩存數據還未失效的情況下(也就是 Cache-Control 的 max-age 或者 Expires 的事件沒有過期、失效),那麼就會直接使用瀏覽器的緩存數據,不會再向伺服器發送任何請求。強緩存生效時,返回的 http 狀態碼是 200,這種響應下的頁面的加載速度是最快的。但是,如果在這個設定的時間內,伺服器端的資源進行修改,那麼頁面上是拿不到這部分更新的數據的,因為它不會再與瀏覽器產生交互。強緩存相關 header 頭屬性Pragma (在 HTTP 1.1 中被遺棄)Cache-Control:設置過期時間(絕對時間、時間點),超過了這個時間點就代表資源過期。但是用戶的本地時間是可以自行調整的,所以會出現問題Expires:設置過期時長(相對時間、時間段),指定一個時間長度,跟本地時間無關,在這個時間段內緩存是有效的。三者的優先級為(從高到低):Pragma > Cache-Control > Expires關於協商緩存當第一次請求伺服器時,返回的響應頭中沒有設置 Cache-Control 和 Expires,或者是 Cache-Control 和 Expires 已經過期的情況下,瀏覽器的第二次請求就會與伺服器進行協商,與伺服器端資源對比,判斷是使用瀏覽器中的緩存數據還是重新發送資源給瀏覽器。如果伺服器端的資源沒有更新修改,那麼返回的 http 狀態碼為 304,告訴瀏覽器可以使用緩存的數據。如果伺服器的資源更新了,就會返回狀態碼 200,把更新後的資源與緩存信息一起發送給瀏覽器。協商緩存的相關 header 頭屬性有:ETagIf-Not-Match協商緩存的執行流程:瀏覽器第一次向伺服器發送請求時,會在響應頭返回協商緩存的頭屬性:ETga 和 Last-Modified(目前不再使用)其中 ETag 是瀏覽器當前資源在伺服器的唯一標識,其生成規則由伺服器決定。當瀏覽器在第二次向伺服器發送請求時,會在請求頭上帶上與 ETag 對應的值。伺服器在接收到 ETag 值後會進行比較,如果返回 304,則說明資源沒有更改,瀏覽器可以在緩存中讀取數據。否則,伺服器會直接返回更新後的資源3、為什麼要使用 HTTP 緩存

HTTP 緩存的好處?減少亢餘的數據傳輸,節約資源緩解伺服器壓力,提高網站性能加快客戶加載網頁的速度4、不想使用緩存的幾種方式

Ctrl + F5強制刷新,都會直接向伺服器提取數據。按F5刷新或瀏覽器的刷新按鈕,默認加上Cache-Control:max-age=0,即會走協商緩存。5、HTTP緩存的注意點

儘量減少 304 的請求,因為我們知道,協商緩存每次都會與後臺伺服器進行交互,所以性能上不是很好。從性能上來看儘量多使用強緩存。6、總結:

對於強制緩存,伺服器通知瀏覽器一個緩存時間,在緩存時間內,下次請求,直接用緩存,不在時間內,執行協商緩存策略。對於協商緩存,將緩存信息中的 Etag 通過請求發送給伺服器,由伺服器校驗,返回304狀態碼時,瀏覽器直接使用緩存,否則伺服器重新發送數據資源給瀏覽器。流程圖第一次請求

第二次請求

最後,咱給小編:

1. 點讚+評論

2. 點頭像關注,轉發給有需要的朋友。

謝謝!!

相關焦點

  • Google Chrome 改變緩存機制 阻止此前廣告商對其濫用
    這個組件不僅存在於Chrome瀏覽器內部,而且從網際網路早期開始就存在於所有的網絡瀏覽器內部,作為一種節省帶寬的功能。在所有的瀏覽器中,緩存系統通常以同樣的方式工作。每個保存在緩存中的圖片、CSS或JS文件都會收到一個存儲密鑰,這個密鑰通常是資源的URL。
  • Chrome 改變緩存機制,阻止此前廣告商對緩存機制的濫用
    品玩10月10日訊,為了保護用戶隱私,Chrome 改變了瀏覽器緩存系統的工作方式。從剛剛發布的 Chrome 86 開始,Google 將逐步改變緩存機制。新的機制能阻止之前廣告商對緩存機制的濫用。此前,HTTP Cache 或 Shared Cache 保存了網頁加載的資源副本,如圖像、CSS 文件和 JS 文件。如果用戶重新訪問了同一個網站或使用相同資源的網站,瀏覽器可以直接從內部緩存裡加載資源,無需重新下載文件。
  • OKHTTP之緩存配置詳解
    我這部分內容也是經網絡上查閱,這一篇寫得很詳細:瀏覽器 HTTP 協議緩存機制詳解https://my.oschina.net/leejun2005/blog/369148以下內容基本出自於此文章。緩存分類http請求有服務端和客戶端之分。
  • Chrome 改變緩存機制,阻止廣告商濫用
    品玩10月10日訊,為了保護用戶隱私,Chrome 改變了瀏覽器緩存系統的工作方式。從剛剛發布的 Chrome 86 開始,Google 將逐步改變緩存機制。Google 引入了名為 cache partitioning 的功能去改變資源的保存,以前資源的存儲鍵只有一個項,現在將包含三個項,包括域名、當前幀和網址。
  • 緩存雪崩緩存穿透緩存擊穿是什麼意思緩存潰之後會如何該如何應對
    4000 個請求,但是緩存機器意外發生了全盤宕機。這樣做的好處:資料庫絕對不會死,限流組件確保了每秒只有多少個請求能通過。只要資料庫不死,就是說,對用戶來說,2/5 的請求都是可以被處理的。只要有 2/5 的請求可以被處理,就意味著你的系統沒死,對用戶來說,可能就是點擊幾次刷不出來頁面,但是多點幾次,就可以刷出來一次。2.緩存穿透 對於系統 A,假設一秒 5000 個請求,結果其中 4000 個請求是黑客發出的惡意攻擊。
  • 探索前端黑科技――通過png圖的rgba值緩存數據
    利用這一點,我們可以把一些需要被緩存的信息通過這個靜態資源緩存機制來進行儲存。 那麼我們如何把信息寫入到靜態資源中呢?canvas提供了.getImageData()方法和.createImageData()方法,可以分別用於讀取和設置圖片的rgba值。所以我們可以利用這兩個API進行信息的讀寫操作。 接下來看原理圖:
  • 你還在為 HTTP 的這些概念頭疼嗎?
    不僅計算機中的 CPU 為了提高指令執行效率從而選擇使用寄存器作為輔助,計算機網絡同樣存在緩存,下面我們就來介紹一下計算機網絡中的緩存。Cache-Control 是通用標頭的指令,它能夠管理如何對 HTTP 的請求或者響應使用緩存。
  • 你了解緩存踩踏嗎?
    緩存失效,大量的數據請求穿透到資料庫,這種現象叫做緩存踩踏。許多科技公司都出現過這個問題,其中不乏巨頭Instagram和DoorDash。什麼是緩存踩踏?    緩存踩踏發生的一個必要條件是高並發訪問緩存,當緩存失效未命中時,所有的請求同時去源數據獲取數據。當然源數據不止是資料庫,也有可能是其他web服務,第三方接口等提供數據的服務。
  • 介紹蘋果手機內存減少清理iPhone緩存
    關於蘋果手機內存減少清理iPhone緩存想要了解清楚,經過雪兒深入研究後得出一些蘋果手機內存減少清理iPhone緩存從官方的建議中整理了下面的方法、相關資料希望可以幫到大家。1、簡訊垃圾:可能一條簡訊不會佔很大的空間,但是簡訊除了文字外,還會帶有圖片、聲音等信息。你要是長時間不去清理,累計起來佔用的內存還是很多的。定期刪掉一些垃圾簡訊很有必要,刪簡訊時也要注意重要的簡訊別誤刪。2、圖片視頻:對於愛自拍的美女們來說,長年累月手機裡的圖片沒有上千張,也有上百張。但因為照片的像素高,所以佔用的空間也會更大。
  • 人手必備的產品自查表(建議收藏+列印)
    (4)產品與其他競品的核心競爭點?(5)產品是否滿足了各個場景下用戶的需求?(6)在做需求之前,是否有進行需求調研(包括競品分析)?(7)在做需求之前,是否了解需求包含功能所涉及的業務?(8)在做需求之前,是否了解需求包含功能所涉及的歷史邏輯?(9)產品要完成的目標是什麼?.
  • CPU有緩存一致性協議MESI,為何還需要Volatile?
    前言 並發編程從作業系統底層工作的整體認識開始 深入理解Java內存模型(JMM)及volatile關鍵字前面我們從作業系統底層了解了現代計算機結構模型中的如果一個緩存將處於S狀態的緩存行作廢了,而另一個緩存實際上可能已經獨享了該緩存行,但是該緩存卻不會將緩存行升遷為E狀態,這是因為其他緩存不會廣播它們作廢掉該緩存行的通知,同樣由於緩存並沒有保存該緩存行的copy數量,因此(即使有這種通知)也沒有辦法確定自己是否已經獨享了該緩存行。
  • 超級詳細,如何把B站緩存m4s文件轉換成mp4格式
    首先我們將視頻緩存下來,然後找到需要的m4s文件(已經找到m4s文件的可以跳過此步)在B站主界面點擊我的,然後點擊離線緩存,再點擊右上角的設置,進入如下界面然後點擊自定義目錄,設置成你能找到的地方。然後點開想要轉換的視頻,右上角點擊三點符號,出現如下界面,點擊緩存,點擊緩存全部,然後查看緩存,等緩存完成。
  • 【高並發】ReadWriteLock怎麼和緩存扯上關係了?!
    具體來說:就是程序啟動的時候,不會將數據加載到緩存,當運行時,需要查詢某些數據,首先檢測緩存中是否存在需要的數據,如果存在,則直接讀取緩存中的數據,如果不存在,則到資料庫中查詢數據,並將數據寫入緩存。後續的讀取操作,因為緩存中已經存在了相應的數據,直接返回緩存的數據即可。
  • IT挑戰高薪必備網絡常識-HTTP的請求方式
    什麼是冪等和非冪等在了解HTTP請求方式之前,我們先來了解一下「冪等」和「非冪等」。冪等性,英文是idempotent,讀作[a'dmptnt]。GET 請求可被緩存;GET 請求保留在瀏覽器歷史記錄中;GET 請求可被收藏為書籤;GET 請求不應在處理敏感數據時使用;GET 請求有長度限制;GET 請求只應當用於取回數據。POST 請求不會被緩存;POST 請求不會保留在瀏覽器歷史記錄中;POST 不能被收藏為書籤;POST 請求對數據長度沒有要求。
  • 再說「中國機制幣」收藏3的「銅板」收藏之胡說! ——五方元音【個人收藏】
    再說「中國機制幣」收藏3的「銅板」收藏之胡說!
  • 《百度網盤》清理緩存方法
    18183首頁 百度網盤 《百度網盤》清理緩存方法 《百度網盤》清理緩存方法 來源:網絡
  • 從一個HTTP請求來讀懂HTTP、TCP協議
    http://www.dumain.com 服務端只認ip地址,瀏覽器將域名解析出來,看下瀏覽器裡有沒有域名對應DNS的緩存,有的話直接拿到服務端的ip地址,沒有的話去本地的host文件看有沒有配置,沒有配置的話才會發起一個DNS請求用來獲取伺服器ip地址。
  • 沒人告訴過你更複雜的緩存穿透怎麼解決
    你應該從網上看過太多的文章說緩存穿透怎麼解決?無非就是布隆過濾器,緩存空值什麼的。 但是,更深入的一個問題,緩存空值有沒有問題?如果緩存的空值太多怎麼辦? 如果用的redis,那麼太多的空值會不會打爆你的redis?如果用的本地緩存,會不會打爆你的內存?
  • 全新傳送機制了解一下!
    我們正通過這項計劃長期致力於讓每個英雄都成為戰場的主角擁有自己的高光時刻今天就來跟大家介紹這項計劃的新進展另外創意互動周火熱進行中雲中君-纖雲弄巧源·夢皮膚明日上架限時6元秒殺還有更多福利活動召喚師們記得看到文末喲~妲己寶寶溫馨提示:本篇推文內容較長,滿滿乾貨,建議收藏
  • Chrome瀏覽器的新緩存系統會影響Google字體的性能
    新的緩存系統意味著網站不能再共享某些緩存的資源,包括Google字體提供的字體。 瀏覽器的緩存臨時保存某些網站元素,例如圖像和JavaScript文件。但是,這些文件也可以由其他網站使用-瀏覽器不必為每個網站或標籤再次下載資源。 但是,對於Chrome 86,整個緩存系統已經過修訂。