記憶盒子

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

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

deflate——過(guò)時(shí)的網(wǎng)頁(yè)壓縮格式,最好禁用

作者:Kaka    時(shí)間:2015-2-10 5:4:34    瀏覽:    評(píng)論:5

在設(shè)置GZip時(shí),發(fā)現(xiàn)同時(shí)有個(gè)Deflate壓縮設(shè)置,一開(kāi)始并不了解Deflate壓縮,于是便在啟用GZip的同時(shí),也啟用了Deflate壓縮。雖然同時(shí)設(shè)置GZip和Deflate壓縮,并不影響網(wǎng)站的正常運(yùn)行,并且在檢測(cè)網(wǎng)站是否啟用GZip時(shí),返回的答案是已啟用。但是我們能否不設(shè)置Deflate壓縮呢?或者來(lái)說(shuō),需要禁用Deflate壓縮呢?Deflate壓縮又有什么好處和壞處?帶著這一堆疑問(wèn),我今天查了一些資料,大概了解了一些,最后得到的結(jié)論是:DEFLATE——過(guò)時(shí)的網(wǎng)頁(yè)壓縮格式,最好禁用。

了解GZip和deflate

GZIP,好像是一個(gè)不透明的或原子的功能。事實(shí)上,HTTP定義了一種機(jī)制,一個(gè)Web客戶機(jī)和Web服務(wù)器同意一壓縮方案可以用來(lái)發(fā)送內(nèi)容,這由使用Accept-Encoding和Content-Encoding標(biāo)頭完成。有兩種常用的HTTP壓縮:DEFLATE和GZIP。

DEFLATE是一個(gè)無(wú)專利的壓縮算法,它可以實(shí)現(xiàn)無(wú)損數(shù)據(jù)壓縮,有眾多開(kāi)源的實(shí)現(xiàn)算法。該標(biāo)準(zhǔn)的實(shí)施庫(kù)大多數(shù)人用的是zlib的。zlib庫(kù)提供用于壓縮和解壓縮使用DEFLATE/INFLATE的數(shù)據(jù)。zlib庫(kù)還提供了一種數(shù)據(jù)格式,混淆的命名ZLIB,它包裝DEFLATE壓縮數(shù)據(jù),具有報(bào)頭和校驗(yàn)和。

GZIP是使用DEFLATE進(jìn)行壓縮數(shù)據(jù)的另一個(gè)壓縮庫(kù)。事實(shí)上,GZIP的大多數(shù)實(shí)現(xiàn)實(shí)際使用zlib庫(kù)的內(nèi)部進(jìn)行DEFLATE/ INFLATE壓縮操作。GZIP產(chǎn)生其自己的數(shù)據(jù)格式,混淆的命名GZIP,它包裝DEFLATE壓縮數(shù)據(jù),具有報(bào)頭和校驗(yàn)和。

早期瀏覽器對(duì)DEFLATE壓縮描述混亂

HTTP/1.1 RFC(超文本傳輸協(xié)議HTTP/1.1版)在為Accept-Encoding和Content-Encoding標(biāo)頭描述允許的壓縮方案時(shí)做得不好,它定義了Content-Encoding:gzip,該響應(yīng)體由使用GZIP數(shù)據(jù)格式(GZIP標(biāo)頭,壓縮數(shù)據(jù),和校驗(yàn)和)組成。它還定義 Content-Encoding:DEFLATE,但是,盡管它的名字,這并不意味著響應(yīng)體是DEFLATE壓縮數(shù)據(jù)的原始?jí)K。根據(jù)RFC-2616,DEFLATE和Content-Encoding:DEFLATE,實(shí)際上意味著響應(yīng)體是由zlib的格式(zlib的頭,壓縮數(shù)據(jù)和校驗(yàn))組成的。

這種“DEFLATE的標(biāo)識(shí)并不意味著原始DEFLATE壓縮數(shù)據(jù)”的想法是相當(dāng)混亂的。早期版本的Microsoft的IIS Web服務(wù)器被編程為返回原始DEFLATE壓縮數(shù)據(jù)的Accept-Encoding::deflate要求,而不是一個(gè)zlib的格式的響應(yīng)。而在與Content-Encoding時(shí)期望的響應(yīng)自然版本的Internet Explorer:DEFLATE標(biāo)頭有原始DEFLATE響應(yīng)主體。

Mark Adler,zlib的作者之一,介紹說(shuō):

早期的微軟服務(wù)器會(huì)錯(cuò)誤地提供“Deflate”的原始?jí)嚎s(例如RFC1951的數(shù)據(jù)沒(méi)有RFC1950的zlib包裝)。這導(dǎo)致的問(wèn)題是,瀏覽器不得不去試一下兩種方式,在最后它只是使用更可靠的GZIP。

現(xiàn)在瀏覽器對(duì)DEFLATE壓縮處理不好

如Mark所說(shuō),瀏覽器收到Content-Encoding后,壓縮必須處理兩種可能的情況:響應(yīng)主體是原始DEFLATE數(shù)據(jù),或響應(yīng)主體是zlib包裝過(guò)的DEFLATE響應(yīng)。那么,現(xiàn)代瀏覽器處理DEFLATE或zlib包裝過(guò)的DEFLATE響應(yīng)效果有多好?Verve工作室測(cè)試了一個(gè)龐大的瀏覽器數(shù)量,結(jié)果并不好。

表中的部分結(jié)果意味著瀏覽器處理原始DEFLATE或zlib包裝過(guò)的DEFLATE不一致,這其實(shí)是另一種說(shuō)法“它被破壞了,功能不正常了。”這似乎是一個(gè)棘手的錯(cuò)誤,而瀏覽器創(chuàng)造者不斷重新引入到他們的產(chǎn)品中。 Safari瀏覽器5.0.2?沒(méi)問(wèn)題。 Safari瀏覽器5.0.3?徹底失敗。 Safari瀏覽器5.0.4?沒(méi)問(wèn)題。 Safari瀏覽器5.0.5?不一致和被破壞。

發(fā)送原始DEFLATE數(shù)據(jù)不是一個(gè)好主意,正如馬克說(shuō),“[它]只使用更可靠的GZIP。”

還應(yīng)該注意的是,所有支持DEFLATE的瀏覽器都支持GZIP,但不是所有支持GZip的瀏覽器都支持DEFLATE。有些瀏覽器,如Android,在它們的Accept-Encoding請(qǐng)求頭不包含deflate壓縮。由于你不得不配置你的Web服務(wù)器使用GZIP,你還不如避免Content-Encoding: deflate。

禁用DEFLATE

幸運(yùn)的是,避免DEFLATE并不那么困難。

Apache處理所有HTTP壓縮的模塊是mod_deflate模塊。盡管它的名字,mod_deflate模塊根本不支持deflate。要得到一個(gè)發(fā)送原始DEFLATE或zlib包裝過(guò)的DEFLATE的Apache2版本是不可能。 Nginx的,如Apache,不支持deflate的,它只會(huì)發(fā)送gzip壓縮的響應(yīng),發(fā)送Accept-Encoding:deflate請(qǐng)求頭將導(dǎo)致未壓縮的響應(yīng)。

微軟的IIS Web服務(wù)器可以同時(shí)發(fā)送gzip和deflate的響應(yīng),你可以分別啟用或禁用每個(gè)方案。對(duì)于IIS6,你可以編輯metabase來(lái)禁用DEFLATE支持。對(duì)于IIS7,您可以通過(guò)編輯.config 文件里的 <httpCompression>元素的<schemes>的DEFLATE壓縮方案部分禁用DEFLATE。

如果你的Web服務(wù)器發(fā)送壓縮的DEFLATE內(nèi)容,無(wú)論免費(fèi)還是商業(yè)的產(chǎn)品都具有內(nèi)置的檢測(cè),“過(guò)時(shí)的壓縮格式”。

檢測(cè)網(wǎng)頁(yè)使用GZip還是deflate壓縮

檢測(cè)網(wǎng)頁(yè)使用使用GZip還是deflate壓縮,可以借助一些在線工具,例如卡卡網(wǎng)的GZip壓縮檢測(cè)(http://pagespeed.webkaka.com/youhua/gzip/)。

GZip壓縮檢測(cè)

GZip壓縮檢測(cè)

需要特別注意的是,GZip壓縮是按文件分別壓縮的,并不是檢測(cè)到網(wǎng)頁(yè)啟用了GZip,所有文件就全部啟用GZip了。很多情況下,網(wǎng)頁(yè)啟用了GZip,但發(fā)現(xiàn)JS文件并沒(méi)有啟用GZip,這是因?yàn)樵O(shè)置不當(dāng)而造成的。

如何知道網(wǎng)頁(yè)的哪些文件啟用了GZip,哪些文件還沒(méi)有啟用GZip?可以借助卡卡網(wǎng)的網(wǎng)站速度診斷工具(http://pagespeed.webkaka.com/),一鍵查看。例如,看看下面的檢測(cè)結(jié)果:

html網(wǎng)頁(yè)已經(jīng)成功啟用了GZip壓縮

html網(wǎng)頁(yè)已經(jīng)成功啟用了GZip壓縮

css文件未成功啟用GZip壓縮

css文件未成功啟用GZip壓縮

這是因?yàn)?,啟用GZip壓縮時(shí)只對(duì)html網(wǎng)頁(yè)有效,而對(duì)其他文件如css沒(méi)有生效。

您可能對(duì)如下文章也感興趣

圖片使用GZip壓縮后體積變大,慎用!

Nginx啟用Gzip壓縮js無(wú)效的原因

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

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

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

網(wǎng)站啟用GZip壓縮后,速度快了3倍!

x

標(biāo)簽: gzip  

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

上一篇: 分享:獲得IP地址詳細(xì)信息的接口(來(lái)自taobao網(wǎng))
下一篇: 修改gif圖片閃動(dòng)頻率,F(xiàn)ireworks輕松搞定

發(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)站分類

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.