圧縮ブラウザーの互換性とGZIPよりも優れたデフレート


91

2012年2月10日更新:

zOompfは、このまさにこのトピックに関する非常に徹底的な研究をここで完了しました。以下の調査結果よりも優先されます。


2010年9月11日更新:

このためのテストプラットフォームがここに作成されまし




GZIPおよびDEFLATE(zlib)のHTTP 1.1定義(背景情報):

"「Gzip」はgzip形式、「deflate」はzlib形式です。生のdeflate圧縮データ形式との混同を避けるために、2番目の形式は「zlib」と呼ばれるはずです。HTTP1.1 RFC 2616は正しくRFC 1950の「deflate」転送エンコーディングに関するzlib仕様では、RFC 1951のdeflate仕様に従って生のdeflateデータを生成または予期するサーバーおよびブラウザー、特にMicrosoft製品が報告されています。 zlib形式を使用した転送エンコーディングは、より効率的なアプローチです(実際 、zlib形式は、)、「gzip」転送エンコーディングを使用すると、HTTP 1.1作成者の側で名前が選択されたため、おそらく信頼性が高くなります。 "(ソース:http : //www.gzip.org/zlib/zlib_faq.html

だから、私の質問:私がRAW deflateデータをzlibラッパー(またはgzip、それに関しては)なしで送信した場合、生のdeflateを理解できない最新のブラウザー(IE6以降、FF、Chrome、Safariなど)がありますか?圧縮データ(HTTPリクエストヘッダー「Accept-Encoding」に「deflate」が含まれていると想定)?

デフレートデータは、常にGZIPより数バイト小さくなります。

これらすべてのブラウザーがデータを正常にデコードできる場合、zlibの代わりにRAW deflateを送信することにはどのような欠点がありますか?



2010年9月11日更新:

このためのテストプラットフォームがここに作成されまし


1
zlib.netと比較してSystem.IO.Compression.DeflateStreamが機能しない理由を詳しく説明していただけませんか?Googleは、「特に優れた圧縮率を持っていない」という1人の言及を除いて、関連性のあるものをあまり示していません。
Joel Mueller、

そうです、.netのgzipメソッドとdeflateメソッドの両方の圧縮率は、本来あるべき状態に近いようには見えません。ただし、2つの間の速度ベンチマークはまだ行っていません(zlib.netとネイティブ.netの比較)。
デビッドマードック、

テストケースの結果をログに記録しませんか?
ガンボ

1
私はSystem.IO.Compression libをいじっていますが、静的/事前定義されたツリーを使用しているように見えるため、圧縮は特定のストリーム用に最適化されていません。最速の方法であるはずですが、圧縮率は確実に低くなります。
ブレイディモリッツ

2
@JoelMuellerこれは説明するかもしれない:virtualdub.org/blog/pivot/entry.php?id=335を
Nayuki

回答:


37

更新:ブラウザーはraw deflateのサポートを中止しています。zOompfは、このまさにこのトピックに関する非常に徹底的な研究をここで完了しました残念ながら、生のデフレートを使用しても安全ではないようです。


その他の結果については、http://www.vervestudios.co/projects/compression-tests/resultsを確認してください

テスト済みのブラウザは次のとおりです。

/*  Browser                       DEFLATE      ZLIB     */
    XP Internet Explorer 6        PASS         FAIL
    XP Internet Explorer 7        PASS         FAIL
    XP Internet Explorer 8        PASS         FAIL
    Vista Internet Explorer 8     PASS         FAIL
    XP Firefox 3.6.*              PASS         PASS
    XP Firefox 3.5.3              PASS         PASS
    XP Firefox 3.0.14             PASS         PASS
    Win 7 Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.5.3           PASS         PASS
    XP Safari 3                   PASS         PASS
    XP Safari 4                   PASS         PASS     
    XP Chrome 3.0.195.27          PASS         PASS
    XP Opera 9                    PASS         PASS
    XP Opera 10                   PASS         PASS
    XP Sea Monkey 1.1.8           PASS         PASS
    Android 1.6 Browser (v4)*     N/A          N/A
    OS-X Safari 4                 PASS         PASS
    OS X Chrome 7.0.517.44        PASS         PASS
    OS X Opera 10.63              PASS         PASS
    iPhone 3.1 Safari             PASS         PASS

* AndroidはHTTPリクエストヘッダー「Accept-Encoding:gzip」を送信します。収縮は許可されていません。


常に生の DEFLATEを送信 でき(HTTPリクエストヘッダー "Accept-Encoding"に "deflate"が含まれている場合)、ブラウザーはエンコードされたデータを正しく解釈できると思います。誰かがこれを間違っていると証明できますか?

注:.NETのDEFLATE(System.IO.Compression.DeflateStream)のネイティブ実装は、生のDEFLATEです。それも吸う。すべての.NET デフレートニーズにzlib.netを使用してください。


1
空気を抜くためにzlib.netを使用することに、より具体的にできますか?それは上記のチャートとどのように一致しますか?生のdeflateは機能するが、zlibは一部のXP IEケースでは機能しないと述べていますか?
David Eison、2011

Androidは、API 9以降、deflate圧縮をサポートしています。詳細については、developer.android.com
/ reference / java / util / zip /…

1
@DavidMurdochテストからの唯一の健全な結果は、deflatevervestudios.co/projects/compression-tests/results使用ないようです。この回答は、それを反映するように編集する必要があると思います
Sam Saffron

はい、同意します。今すぐ更新しています。
David Murdoch


1

AddOutputFilterByType DEFLATEmod_deflate を使用すると、デフォルトでgzipで送信されるのではないですか?


1
ちょっとポール、私は有名人と話しているように感じます...あなたはどこにでもいます :-)とにかく、AddOutputFilertByType DEFLATEデフォルトで(私が知る限り)圧縮を解除する代わりに、応答をgzipします。Gzipされるdeflate手段- 10バイトのヘッダー+ 8バイトのフッター+ Gzipより常に大きくなりますdeflate...なぜ私たちが今までにgzip使うべきか?(gzipの構成の内訳については、en.wikipedia.org / wiki / GzipFile_formatを参照してください)。それでもdeflate、Apacheで推奨される圧縮方法として設定する方法はわかりません。
デビッドマードック

-1

私の知る限り、はい-ほとんどの場合、「常に生のDEFLATEを送信でき、すべてが大丈夫です」...「常に」というわけではありませんが、ほとんどすべての場合があります。そうでない場合、これはブラウザの問題です。


私は生のデフレートが失敗するケースを見つけようとしています。仕様によると、すべてのブラウザで失敗するはずです。
デビッドマードック

deflate(すなわちないのzlib、全くヘッダ)のみで動作しますIE7の場合encoding:gzip(のみクロムV24でテスト)とencoding:deflateにおけるクロム
Scotty.NET 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.