1. ホーム
  2. optimization

[解決済み] Deflate圧縮のブラウザ互換性とGZIPに対する優位性

2023-03-14 18:48:01

質問


2012年2月10日に更新されました。

zOompfは、このトピックに関する非常に徹底的な調査を完了しました。 ここで . それは以下のどんな調査結果にも勝るものです。


2010年9月11日に更新されました。

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






HTTP 1.1 の GZIP と DEFLATE (zlib) の定義についての背景情報です。

" 'Gzip' は gzip フォーマットであり deflate' は zlib フォーマットです。 . 彼らは おそらく、2番目のものを「zlib」と呼んで、生のdeflate圧縮データ形式との混同を避けるべきだったのでしょう。 生のdeflate圧縮データ形式との混同を避けるためです。HTTP 1.1 RFC 2616 は、RFC 1950 の zlib 仕様を 'deflate' 転送エンコーディングとして正しく指し示しています。 の zlib 仕様を指しています。 の報告があります。 サーバやブラウザが誤って生の deflate データを生成したり、期待したりすることが報告されています。 のデータを生成したり期待したりするサーバやブラウザがあるという報告があります。 特に マイクロソフト製品 . そのため、zlib 形式を使用した 'deflate' 転送エンコーディングがより効率的なアプローチであるにもかかわらず zlib フォーマットを使用した「deflate」転送エンコーディングは、より効率的なアプローチであるにもかかわらず ( であり、実際まさに zlib フォーマットは何のために設計されたのか のために設計されたものです)、 'gzip' 転送エンコーディングの使用は、不幸なことに エンコーディングの使用は、HTTP 1.1 作者側の不幸な名前の選択により、おそらくより信頼できるものです。 HTTP 1.1 の著者の一部である "(ソースはこちら。 http://www.gzip.org/zlib/zlib_faq.html )

そこで質問ですが、もし私がzlibラッパーを使わずにRAWのdeflateデータを送った場合(あるいはgzipを使った場合。 を使用しない場合、最新のブラウザ (たとえば、IE6 以降、FF、Chrome、Safari など) で生の deflate データを理解できないものはあるのでしょうか? Chrome, Safari, etc)で、生のデフレート圧縮データを理解できないものはありますか? 圧縮されたデータ (HTTP リクエスト ヘッダー "Accept-Encoding" が "deflate" を含むと仮定して) を理解できないモダンなブラウザはありますか?

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

これらのすべてのブラウザがデータを正常にデコードできるのであれば、zlibではなくRAWのdeflateを送信することのデメリットは何でしょうか? zlib の代わりに RAW deflate を送信することの欠点は何でしょうか?





2010年9月11日に更新されました。

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

どのように解決するのですか?

UPDATE: ブラウザは生の deflate のサポートを停止しています。zOompf はこのトピックに関する非常に徹底した調査を完了しました。 はこちら . 残念ながら、生のdeflateは使っても安全ではないようです。


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です。これも最悪です。以下のものを使用してください。 zlib.net を使ってください。