<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **什么是瀏覽器緩存** 瀏覽器緩存(Brower Caching)是瀏覽器在本地磁盤對用戶最近請求過的文檔進行存儲,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁盤加載文檔。 **瀏覽器緩存的優點有:** 1.減少了冗余的數據傳輸,節省了網費 2.減少了服務器的負擔,大大提升了網站的性能 3.加快了客戶端加載網頁的速度 瀏覽器緩存主要有兩類:緩存協商和徹底緩存,也有稱之為協商緩存和強緩存。 1.強緩存:不會向服務器發送請求,直接從緩存中讀取資源,在chrome控制臺的network選項中可以看到該請求返回200的狀態碼; 2.協商緩存:向服務器發送請求,服務器會根據這個請求的request header的一些參數來判斷是否命中協商緩存,如果命中,則返回304狀態碼并帶上新的response header通知瀏覽器從緩存中讀取資源; 兩者的共同點是,都是從客戶端緩存中讀取資源;區別是強緩存不會發請求,協商緩存會發請求。 **緩存中header的參數:** 強制緩存 Expires:response header里的過期時間,瀏覽器再次加載資源時,如果在這個過期時間內,則命中強緩存。 **Cache-Control:**當值設為max-age=300時,則代表在這個請求正確返回時間(瀏覽器也會記錄下來)的5分鐘內再次加載資源,就會命中強緩存。 **cache-control除了該字段外,還有下面幾個比較常用的設置值:** **\-no-cache:**不使用本地緩存。需要使用緩存協商,先與服務器確認返回的響應是否被更改,如果之前的響應中存在ETag,那么請求的時候會與服務端驗證,如果資源未被更改,則可以避免重新下載。 **\-no-store:**直接禁止瀏覽器緩存數據,每次用戶請求該資源,都會向服務器發送一個請求,每次都會下載完整的資源。 **\-public:**可以被所有的用戶緩存,包括終端用戶和CDN等中間代理服務器。 **\-private:**只能被終端用戶的瀏覽器緩存,不允許CDN等中繼緩存服務器對其緩存。 **協商緩存** Last-Modify/If-Modify-Since:瀏覽器第一次請求一個資源的時候,服務器返回的header中會加上Last-Modify,Last-modify是一個時間標識該資源的最后修改時間;當瀏覽器再次請求該資源時,request的請求頭中會包含If-Modify-Since,該值為緩存之前返回的Last-Modify。服務器收到If-Modify-Since后,根據資源的最后修改時間判斷是否命中緩存 **Etag:**web服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識(生成規則由服務器決定)。 **If-None-Match:**當資源過期時(使用Cache-Control標識的max-age),發現資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match (Etag的值)。web服務器收到請求后發現有頭If-None-Match 則與被請求資源的相應校驗串進行比對,決定是否命中協商緩存; **ETag和Last-Modified的作用和用法,他們的區別:** 1.Etag要優于Last-Modified。Last-Modified的時間單位是秒,如果某個文件在1秒內改變了多次,那么他們的Last-Modified其實并沒有體現出來修改,但是Etag每次都會改變確保了精度; 2.在性能上,Etag要遜于Last-Modified,畢竟Last-Modified只需要記錄時間,而Etag需要服務器通過算法來計算出一個hash值; 3.在優先級上,服務器校驗優先考慮Etag。 **瀏覽器緩存過程** 1.瀏覽器第一次加載資源,服務器返回200,瀏覽器將資源文件從服務器上請求下載下來,并把response header及該請求的返回時間一并緩存; 2.下一次加載資源時,先比較當前時間和上一次返回200時的時間差,如果沒有超過cache-control設置的max-age,則沒有過期,命中強緩存,不發請求直接從本地緩存讀取該文件(如果瀏覽器不支持HTTP1.1,則用expires判斷是否過期);如果時間過期,則向服務器發送header帶有If-None-Match和If-Modified-Since的請求 3.服務器收到請求后,優先根據Etag的值判斷被請求的文件有沒有做修改,Etag值一致則沒有修改,命中協商緩存,返回304;如果不一致則有改動,直接返回新的資源文件帶上新的Etag值并返回200;; 4.如果服務器收到的請求沒有Etag值,則將If-Modified-Since和被請求文件的最后修改時間做比對,一致則命中協商緩存,返回304;不一致則返回新的last-modified和文件并返回200;; **3.常見問題** 用戶行為對瀏覽器緩存的影響 **4.解決方案** 點擊刷新按鈕或者按F5 瀏覽器直接對本地的緩存文件過期,但是會帶上If-Modifed-Since,If-None-Match,這就意味著服務器會對文件檢查新鮮度,返回結果可能是304,也有可能是200. 用戶按Ctrl+F5(強制刷新) 瀏覽器不僅會對本地文件過期,而且不會帶上 If-Modifed-Since,If-None-Match,相當于之前從來沒有請求過,返回結果是200. 地址欄回車 瀏覽器發起請求,按照正常流程,本地檢查是否過期,然后服務器檢查新鮮度,最后返回內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看