記憶盒子

把記憶裝進(jìn)灰色的盒子,封裝起來(lái),那年那月,重新拾起。

首頁(yè)搜索目錄
search
當(dāng)前主題: 互聯(lián)網(wǎng)絡(luò)

標(biāo)頭“Vary:Accept-Encoding”指定方法及其重要性分析

作者:Kaka    時(shí)間:2013-11-22 22:8:47    瀏覽:    評(píng)論:9

      在webkaka的網(wǎng)站速度診斷性能優(yōu)化里有一項(xiàng)叫指定“Vary:Accept-Encoding”標(biāo)頭,可能很多人不太明白這是什么意思,不知道它對(duì)網(wǎng)站的影響有多大,不知道如何進(jìn)行優(yōu)化,為此,本文將給大家闡述下“Vary:Accept-Encoding”標(biāo)頭的意義以及設(shè)置方法。

指定“Vary:Accept-Encoding”標(biāo)頭

指定“Vary:Accept-Encoding”標(biāo)頭

      指定“Vary: Accept-Encoding”標(biāo)頭的意義

      指定“Vary: Accept-Encoding”標(biāo)頭,用一句話來(lái)說(shuō)明它的意義,就是“告訴代理服務(wù)器緩存兩種版本的資源:壓縮和非壓縮,這有助于避免一些公共代理不能正確地檢測(cè)Content-Encoding標(biāo)頭的問(wèn)題。”不過(guò)我想很多人都不理解這句話是什么意思,所以需要更詳細(xì)的解釋。

      先來(lái)看看下面這幅圖:

網(wǎng)頁(yè)從請(qǐng)求到響應(yīng)的過(guò)程

網(wǎng)頁(yè)從請(qǐng)求到響應(yīng)的過(guò)程

      這個(gè)圖顯示了一個(gè)網(wǎng)頁(yè)從請(qǐng)求到響應(yīng)的過(guò)程。正常情況下,“Response”的結(jié)果是可讀文本,但并不是所有的服務(wù)器端都返回這樣的正常的結(jié)果到用戶端,有的返回一堆亂碼,這顯然是不正常的。

      當(dāng)瀏覽器發(fā)出一個(gè)請(qǐng)求時(shí),會(huì)包含一些HTTP頭信息,服務(wù)器會(huì)根據(jù)這些頭信息決定返回什么樣的東西(這是一個(gè)移動(dòng)客戶端嗎?它能否處理壓縮內(nèi)容?它是否需要特定的語(yǔ)言支持?)。

      直接訪問(wèn)是好的,但現(xiàn)在網(wǎng)絡(luò)使用了中間高速緩存(cache)和內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)。這就產(chǎn)生了一個(gè)問(wèn)題,緩存如何使用頭信息決定返回什么?它能否復(fù)制服務(wù)器端的決策邏輯?

      “Vary”解決了這個(gè)問(wèn)題,“Vary”頭描述什么信息“唯一地”標(biāo)識(shí)一個(gè)請(qǐng)求——傳入的請(qǐng)求只有完全匹配緩存的“Vary”信息,緩存才被使用。

      假如沒(méi)有“Vary”頭,那么如果由于某種原因,客戶端有一個(gè)未壓縮的版本在其緩存中的文件,它會(huì)不知道隨后再次要求它的壓縮版本,而不是只從緩存中使用未壓縮的文件。——這就很好的解釋了“Vary”頭信息的重要意義。

      設(shè)想有兩個(gè)客戶,一個(gè)使用的舊瀏覽器不支持壓縮,一個(gè)使用新的瀏覽器支持壓縮,如果他們都請(qǐng)求同一個(gè)網(wǎng)頁(yè),那么取決于誰(shuí)先請(qǐng)求,壓縮或非壓縮版本便存儲(chǔ)在CDN上。這樣問(wèn)題就出現(xiàn)了,舊瀏覽器請(qǐng)求常規(guī)網(wǎng)頁(yè)但獲得緩存的壓縮版本,而新瀏覽器會(huì)獲得緩存的非壓縮版本但嘗試去“解壓”它。無(wú)論哪種方式都是壞消息。解決方法是,源服務(wù)器回送“Vary: Accept-Encoding”。

      現(xiàn)在的中間CDN會(huì)存儲(chǔ)獨(dú)立的緩存條目,一個(gè)是Accept-encoding: gzip ,而如果你沒(méi)有發(fā)送header,則存儲(chǔ)另一個(gè)。

      標(biāo)頭“Vary:Accept-Encoding”指定方法

      現(xiàn)在的新瀏覽器都支持壓縮了,因此如果網(wǎng)站啟用了GZip,可以無(wú)需再指定“Vary: Accept-Encoding”標(biāo)頭,不過(guò)指定“Vary: Accept-Encoding”標(biāo)頭會(huì)有更高的保險(xiǎn),而它并不需要你額外的開(kāi)銷(xiāo),為什么不指定呢?下面是設(shè)置方法:

      Apache/.htaccess

      <IfModule mod_headers.c>
        <FilesMatch ".(js|css|xml|gz|html)$">
          Header append Vary: Accept-Encoding
        </FilesMatch>
      </IfModule>

      Nginx

      gzip_vary on

      IIS

      在web.config里加上如下配置,web.config位置在:%windir%\Microsoft.NET\Framework\.net版本號(hào)\CONFIG\Web.config 。

      <system.webServer>
        <httpProtocol>
          <customHeaders>
          <remove name="Vary"></remove>
          <add name="Vary" value="Accept-Encoding"></add>
          </customHeaders>
        </httpProtocol>
      </system.webServer>

      指定“Vary:Accept-Encoding”標(biāo)頭,網(wǎng)站需要啟用GZip,才變得有意義。網(wǎng)站如何啟用GZip?可以看看如下的教程:

      IIS啟用GZip壓縮的詳細(xì)教程【圖解】

      Nginx 如何配置GZip壓縮

      如何啟用Apache的GZip壓縮功能

      lighttpd 如何配置GZip壓縮

      相關(guān)文章

      IIS啟用GZIP壓縮css、js無(wú)效的原因及解決方法

      IIS啟用GZip失敗之原因:臨時(shí)目錄權(quán)限沒(méi)設(shè)好

      圖片GZip壓縮后體積會(huì)變大

      GZip壓縮啟動(dòng)后js css不能運(yùn)行的解決方法

x

標(biāo)簽: SEO  

※ 網(wǎng)站速度慢?試試網(wǎng)站自動(dòng)優(yōu)化工具 ※

上一篇: 4種方法固定側(cè)欄內(nèi)容和廣告位 提高網(wǎng)站PV和點(diǎn)擊率
下一篇: 如何利用Firefox自帶的Web開(kāi)發(fā)者工具分析網(wǎng)頁(yè)
  • 5.開(kāi)*****
  • 我的網(wǎng)站測(cè)速后顯示的“Vary:Accept-Encoding”未指定,幸好有這篇教程說(shuō)明,感謝分享!全部?jī)?yōu)化完成咯
  • 2014/12/10 22:05:59 回復(fù)該留言

發(fā)表評(píng)論:

◎歡迎參與討論,請(qǐng)?jiān)谶@里發(fā)表您的看法、交流您的觀點(diǎn)。

訂閱博客                   QQ交流群(312716741)

  • 通過(guò)Google訂閱本站 通過(guò)鮮果訂閱本站 通過(guò)抓蝦訂閱本站
  • 通過(guò)QQ郵箱訂閱本站 通過(guò)Yahoo訂閱本站 通過(guò)有道訂閱本站

Search

最新評(píng)論及回復(fù)

最近留言

網(wǎng)站分類(lèi)

Powered By Z-Blog 1.8 Walle Build 91204 Designed by Han'space

Copyright @2009-2024 All Rights Reserved. 粵ICP備14028160號(hào)-1

Powered By Z-Blog 1.8 Walle Build 91204
Copyright @2009-2024 All Rights Reserved.