<code id="6mcsu"></code>
<li id="6mcsu"></li>
<li id="6mcsu"><dl id="6mcsu"></dl></li>
  • <code id="6mcsu"><tr id="6mcsu"></tr></code>
    或者

    Web前端性能優(yōu)化教程08:配置ETag

    作者:希臘神話 瀏覽:238 發(fā)布時間:2018-05-24
    分享 評論 1

        本文是Web前端性能優(yōu)化系列文章中的第五篇,主要講述內(nèi)容:配置ETag.完整教程可查看:Web前端性能優(yōu)化


        什么是ETag?


        實體標簽(EntityTag)是唯一標識了一個組件的一個特定版本的字符串,是web服務器用于確認緩存組件的有效性的一種機制,通常可以使用組件的某些屬性來構造它.


        條件GET請求


        瀏覽器下載組件的時候,會將它們存儲到瀏覽器緩存中.如果需要再次獲取相同的組件,瀏覽器將檢查組件的緩存時間,假如已經(jīng)過期,那么瀏覽器將發(fā)送一個條件GET請求到服務器,服務器判斷緩存還有效,則發(fā)送一個304響應,告訴瀏覽器可以重用緩存組件.


        那么服務器是根據(jù)什么判斷緩存是否還有效呢?答案有兩種方式,一種是前面提到的ETag,另一種是根據(jù)最新修改時間.先來看看最新修改時間.


        最新修改時間


        原始服務器通過Last-Modified響應頭來返回組件的最新修改時間.


        以一個實際例子來說明,當我們不帶緩存訪問的時候,我們需要下載google的logo,這時會發(fā)送這樣一個HTTP請求:


        Request:


        GET / HTTP


        Host:


        Response:


        HTTP 200 OK


        Last-Modified:Wed, 09 Oct 2013 01:35:39 GMT


        當需要再次訪問相同組件的時候,同時緩存已經(jīng)過期,瀏覽器會發(fā)送如下條件GET請求:


        Request:


        GET / HTTP


        If-Modified-Since:Wed, 09 Oct 2013 01:35:39 GMT


        Host:


        Response:


        HTTP 304 Not Modified


        實體標簽


        ETag提供了另外一種方式,用于檢測瀏覽器緩存中的組件與原始服務器上的組件是否匹配.摘抄自書上的例子:


        不帶緩存的請求:


        Request:


        GET /i/yahoo/gif HTTP


        Host:


        Response:


        HTTP 200 OK


        Last-Modified:Tue,12 Dec 200603:03:59 GMT


        ETag:"10c24bc-4ab-457elc1f"


        再次請求相同組件:


        Request:


        GET /i/yahoo/gif HTTP


        Host:


        If-Modified-Since:Tue,12 Dec 200603:03:59 GMT


        If-None-Match:"10c24bc-4ab-457elc1f"


        Response:


        HTTP 304 Not Midified


        當ETag和Modified-Time都出現(xiàn)了,則原始服務器禁止返回304除非請求中的條件頭字段全部一致.


        為什么要引入ETag?


        ETag主要是為了解決Last-Modified無法解決的一些問題:


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


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


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


        ETag帶來的問題


        ETag的問題在于通常使用某些屬性來構造它,有些屬性對于特定的部署了網(wǎng)站的服務器來說是唯一的.當使用集群服務器的時候,瀏覽器從一臺服務器上獲取了原始組件,之后又向另外一臺不同的服務器發(fā)起條件GET請求,ETag就會出現(xiàn)不匹配的狀況.


        最佳實踐


        1. 如果使用Last-Modified不會出現(xiàn)任何問題,可以直接移除ETag,google的搜索首頁則沒有使用ETag.


        2. 確定要使用ETag,在配置ETag的值的時候,移除可能影響到組件集群服務器驗證的屬性,例如只包含組件大小和時間戳.


        完整教程可查看:Web前端性能優(yōu)化


    无码毛片视频一区二区本码| 国产精品无码一区二区三级| 久久亚洲AV永久无码精品| 最好看的中文字幕最经典的中文字幕视频 | 久久久无码精品亚洲日韩京东传媒| 狠狠精品久久久无码中文字幕| 中文无码久久精品| 午夜视频在线观看www中文| 日韩精品无码久久一区二区三| 日韩乱码人妻无码系列中文字幕 | 欧美日韩亚洲中文字幕二区| 亚洲爆乳精品无码一区二区 | 精品无码久久久久国产| 成在人线av无码免费高潮喷水| 国产一区二区中文字幕| 中文字幕aⅴ人妻一区二区 | 无码丰满少妇2在线观看| 线中文在线资源 官网| www.中文字幕| 中文字幕AV一区中文字幕天堂 | 亚洲区日韩区无码区| 国产成人A人亚洲精品无码| 无码精品国产VA在线观看DVD| 波多野结衣AV无码久久一区 | 国产欧美日韩中文字幕| 熟妇人妻中文字幕无码老熟妇| 亚洲Av无码国产情品久久| 天堂无码久久综合东京热| 狠狠精品干练久久久无码中文字幕 | 丰满熟妇乱又伦在线无码视频| 日韩网红少妇无码视频香港| 亚洲av无码精品网站| 无码无套少妇毛多18p| 无码少妇一区二区| 人妻少妇精品无码专区二区| 无码精品国产VA在线观看DVD| 日韩精品少妇无码受不了| 国产在线无码一区二区三区视频| 无码国产精品一区二区免费vr| 精品日韩亚洲AV无码一区二区三区| 日韩人妻无码精品久久免费一|