<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          瀏覽器緩存_HTTP強緩存和協商緩存

          時間:?2017-11-28閱讀:?1103標簽:?緩存

          瀏覽器緩存

          瀏覽器緩存是瀏覽器在本地磁盤對用戶最近請求過的文檔進行存儲,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁盤加載文檔。

          所以根據上面的特點,瀏覽器緩存有下面的優點:

          1. 減少冗余的數據傳輸

          2. 減少服務器負擔

          3. 加快客戶端加載網頁的速度

          瀏覽器緩存是Web性能優化的重要方式。那么瀏覽器緩存的過程究竟是怎么樣的呢?

          在瀏覽器第一次發起請求時,本地無緩存,向web服務器發送請求,服務器起端響應請求,瀏覽器端緩存。過程如下:


          在第一次請求時,服務器會將頁面最后修改時間通過Last-Modified標識由服務器發送給客戶端,客戶端記錄修改時間;服務器還會生成一個Etag,并發送給客戶端。

          瀏覽器后續再次進行請求時:


          瀏覽器緩存主要分為強強緩存(也稱本地緩存)和協商緩存(也稱弱緩存)。根據上圖,瀏覽器在第一次請求發生后,再次發送請求時:

          • 瀏覽器請求某一資源時,會先獲取該資源緩存的header信息,然后根據header中的Cache-Control和Expires來判斷是否過期。若沒過期則直接從緩存中獲取資源信息,包括緩存的header的信息,所以此次請求不會與服務器進行通信。這里判斷是否過期,則是強緩存相關。后面會講Cache-Control和Expires相關。

          • 如果顯示已過期,瀏覽器會向服務器端發送請求,這個請求會攜帶第一次請求返回的有關緩存的header字段信息,比如客戶端會通過If-None-Match頭將先前服務器端發送過來的Etag發送給服務器,服務會對比這個客戶端發過來的Etag是否與服務器的相同,若相同,就將If-None-Match的值設為false,返回狀態304,客戶端繼續使用本地緩存,不解析服務器端發回來的數據,若不相同就將If-None-Match的值設為true,返回狀態為200,客戶端重新機械服務器端返回的數據;客戶端還會通過If-Modified-Since頭將先前服務器端發過來的最后修改時間戳發送給服務器,服務器端通過這個時間戳判斷客戶端的頁面是否是最新的,如果不是最新的,則返回最新的內容,如果是最新的,則返回304,客戶端繼續使用本地緩存。


          強緩存

          強緩存是利用http頭中的Expires和Cache-Control兩個字段來控制的,用來表示資源的緩存時間。強緩存中,普通刷新會忽略它,但不會清除它,需要強制刷新。瀏覽器強制刷新,請求會帶上Cache-Control:no-cache和Pragma:no-cache


          Expires

          Expires是http1.0的規范,它的值是一個絕對時間的GMT格式的時間字符串。如我現在這個網頁的Expires值是:expires:Fri, 14 Apr 2017 10:47:02 GMT。這個時間代表這這個資源的失效時間,只要發送請求時間是在Expires之前,那么本地緩存始終有效,則在緩存中讀取數據。所以這種方式有一個明顯的缺點,由于失效的時間是一個絕對時間,所以當服務器與客戶端時間偏差較大時,就會導致緩存混亂。如果同時出現Cache-Control:max-age和Expires,那么max-age優先級更高。如我主頁的response headers部分如下:

          cache-control:max-age=691200
          expires:Fri, 14 Apr 2017 10:47:02 GMT

          那么表示資源可以被緩存的最長時間為691200秒,會優先考慮max-age。


          Cache-Control

          Cache-Control是在http1.1中出現的,主要是利用該字段的max-age值來進行判斷,它是一個相對時間,例如Cache-Control:max-age=3600,代表著資源的有效期是3600秒。cache-control除了該字段外,還有下面幾個比較常用的設置值:

          • no-cache:不使用本地緩存。需要使用緩存協商,先與服務器確認返回的響應是否被更改,如果之前的響應中存在ETag,那么請求的時候會與服務端驗證,如果資源未被更改,則可以避免重新下載。

          • no-store:直接禁止游覽器緩存數據,每次用戶請求該資源,都會向服務器發送一個請求,每次都會下載完整的資源。

          • public:可以被所有的用戶緩存,包括終端用戶和CDN等中間代理服務器。

          • private:只能被終端用戶的瀏覽器緩存,不允許CDN等中繼緩存服務器對其緩存。
            Cache-Control與Expires可以在服務端配置同時啟用,同時啟用的時候Cache-Control優先級高。


          協商緩存

          協商緩存就是由服務器來確定緩存資源是否可用,所以客戶端與服務器端要通過某種標識來進行通信,從而讓服務器判斷請求資源是否可以緩存訪問。

          普通刷新會啟用弱緩存,忽略強緩存。只有在地址欄或收藏夾輸入網址、通過鏈接引用資源等情況下,瀏覽器才會啟用強緩存,這也是為什么有時候我們更新一張圖片、一個js文件,頁面內容依然是舊的,但是直接瀏覽器訪問那個圖片或文件,看到的內容卻是新的。

          這個主要涉及到兩組header字段:Etag和If-None-Match、Last-Modified和If-Modified-Since。上面以及說得很清楚這兩組怎么使用啦~復習一下:


          Etag和If-None-Match

          Etag/If-None-Match返回的是一個校驗碼。ETag可以保證每一個資源是唯一的,資源變化都會導致ETag變化。服務器根據瀏覽器上送的If-None-Match值來判斷是否命中緩存。

          與Last-Modified不一樣的是,當服務器返回304 Not Modified的響應時,由于ETag重新生成過,response header中還會把這個ETag返回,即使這個ETag跟之前的沒有變化。


          Last-Modify/If-Modify-Since

          瀏覽器第一次請求一個資源的時候,服務器返回的header中會加上Last-Modify,Last-modify是一個時間標識該資源的最后修改時間,例如Last-Modify: Thu,31 Dec 2037 23:59:59 GMT。

          當瀏覽器再次請求該資源時,request的請求頭中會包含If-Modify-Since,該值為緩存之前返回的Last-Modify。服務器收到If-Modify-Since后,根據資源的最后修改時間判斷是否命中緩存。

          如果命中緩存,則返回304,并且不會返回資源內容,并且不會返回Last-Modify。


          為什么要有Etag

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

          • 一些文件也許會周期性的更改,但是他的內容并不改變(僅僅改變的修改時間),這個時候我們并不希望客戶端認為這個文件被修改了,而重新GET;

          • 某些文件修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了N次),If-Modified-Since能檢查到的粒度是s級的,這種修改無法判斷(或者說UNIX記錄MTIME只能精確到秒);

          • 某些服務器不能精確的得到文件的最后修改時間。

          Last-Modified與ETag是可以一起使用的,服務器會優先驗證ETag,一致的情況下,才會繼續比對Last-Modified,最后才決定是否返回304。


          吐血推薦

          1.站長廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入...

          2.休閑娛樂: 直播/交友    優惠券領取   網頁游戲   H5游戲

          鏈接: http://www.modern-decoration.com.cn/article/detial/187

          keep-alive的使用

          <keep-alive> 是用在其一個直屬的子組件被開關的情形。如果你在其中有 v-for 則不會工作。如果有上述的多個條件性的子元素,<keep-alive> 要求同時只有一個子元素被渲染。

          如何獲取最新版的js文件,解決被瀏覽器緩存的問題

          假設有一個js文件(以jquery為例),在服務器上的URL地址為:../js/jquery.js 。當某天jquery版本更新了,用最新版的jquery文件覆蓋了原來舊版的jquery文件。這時,在打開引用了此js文件的網頁時,有可能引用的還是舊版

          徹底理解瀏覽器緩存機制

          瀏覽器的緩存機制也就是我們說的 HTTP 緩存機制,其機制是根據 HTTP 報文的緩存標示進行的。所以在分析瀏覽器緩存之前,我們先使用圖文簡單介紹一下 HTTP 報文,HTTP 報文分為兩種:

          nginx開啟gzip壓縮和靜態緩存

          nginx實現資源壓縮的原理是通過ngx_http_gzip_module模塊攔截請求,并對需要做gzip的類型做gzip壓縮,該模塊是默認基礎的,不需要重新編譯,直接開啟即可。

          Apache網頁優化之壓縮與緩存

          在企業中,部署Apache后只采用默認的配置參數,會引發網站很多問題,換言之默認配置是針對以前較低的服務器配置的,以前的配置已經不適用當今互聯網時代為了適應企業需求,就需要考慮如何提升Apache的性能與穩定性

          緩存常見問題及解決方案

          使用緩存可以緩解大流量壓力,顯著提高程序的性能。我們在使用緩存系統時,尤其是大并發情況下,經常會遇到一些“疑難雜癥”。本文總結了一些使用緩存時常見的問題及解決方案,以后在遇到這類問題時可以作為參考

          vue-router路由元信息及keep-alive組件級緩存

          路由元信息?(黑人問號臉???)是不是這么官方的解釋很多人都會一臉懵?那么我們說meta,是不是很多人恍然大悟,因為在項目中用到或者看到過呢?是的,路由元信息就是我們定義路由時配置的meta字段;那么這個meta的作用是什么呢?

          前端性能優化之http緩存

          如果每次都要求用戶從服務器獲取數據,那么速度和流量勢必有問題,所以就需要http緩存來解決了。如果文件沒有更新就用緩存起來的原文件。緩存分為強緩存和協商緩存

          Node.js中的code cache

          V8使用JIT去解析JS,在JS代碼執行之前,首先要消耗大量的時間在解析和編譯中,這會拖慢JS的總執行時間,在2015年V8支持了code cache方案來解決這個問題。

          瀏覽器端的九大緩存

          瀏覽器緩存是瀏覽器端保存數據用于快速讀取或避免重復資源請求的優化機制,有效的緩存使用可以避免重復的網絡請求和瀏覽器快速地讀取本地數據,整體上加速網頁展示給用戶。瀏覽器端緩存的機制種類較多,總體歸納為九種

          fly63.com版權所有,內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网