web-dev-qa-db-ja.com

現実のサーバーがdeflateエンコーディングよりもgzipを好むのはなぜですか?

エンコーディング、デコーディング、および圧縮サイズの速度に関しては、gzipよりも deflateエンコーディングが勝者 をすでに知っています。

では、なぜ(私が見つけることができる)大きなサイトがそれを送信しないのですか(それを受け入れるブラウザを使用している場合)?

Yahooの主張 deflateは「効果が低い」です。どうして?

私はdeflateを優先するHTTPサーバーソフトウェアを維持しているので、継続しないことが本当に正当な理由があるかどうか知りたいのですが。

61
Steve Clay

仕様とHTTPの間の命名について、いくつかの混乱があります。

  • [〜#〜] deflate [〜#〜]RFC 1951 で定義されているとおり、圧縮データ形式
  • [〜#〜] zlib [〜#〜]RFC 1950 で定義されているとおり、[〜#〜] deflate [〜#〜]データ形式を使用する圧縮データ形式
  • [〜#〜] gzip [〜#〜]RFC 1952 で定義されているとおり、[〜#〜] deflate [〜#〜]圧縮データ形式を使用するファイル形式

しかし、 HTTPは別の名前を使用しています

  • gzipRFC 1952 [25]で説明されているように、ファイル圧縮プログラム "gzip"(GNU Zip)によって生成されるエンコード形式。このフォーマットは、32ビットCRCを備えたLempel-Zivコーディング(LZ77)です。

  • deflateRFC 1950 [31]で定義されている「zlib」フォーマットと、RFC 1951で説明されている「deflate」圧縮メカニズムの組み合わせ[ 29]。

要約すると:

  • gzip[〜#〜] gzip [〜#〜]ファイル形式です。
  • deflateは実際には[〜#〜] zlib [〜#〜]データ形式です。 (ただし、一部のクライアントは実際の[〜#〜] deflate [〜#〜]データ形式もdeflateで受け入れます。)

この質問の回答も参照「gzip」と「deflate」HTTP 1.1エンコーディングの違いは何ですか?

「gzip」と「deflate」HTTP 1.1エンコーディングの違いは何ですか?

「gzip」はgzip形式、「deflate」はzlib形式です。生のdeflate圧縮データ形式との混同を避けるために、おそらく代わりに2番目のものを「zlib」と呼ぶべきでした。 HTTP 1.1 RFC 2616はRFC 1950のzlib仕様で「deflate」転送エンコードを正しく指していますが、RFC 1951のdeflate仕様に従って生のdeflateデータを誤って生成または予期するサーバーおよびブラウザー、特にMicrosoftの報告があります。 。したがって、zlib形式を使用する「deflate」転送エンコーディングの方が効率的なアプローチです(実際、zlib形式が設計されたとおり)、「gzip」転送エンコーディングを使用すると、残念ながら選択が難しいため、おそらく信頼性が高くなります。 HTTP 1.1作成者側の名前。

72
Gumbo

私の最小限のテストから、それはほとんどのHTTPdsのいずれかであるように見えます:

  1. オンザフライでdeflateをサポートしない:Apacheのmod_deflate(驚き)、GWS
  2. またはgzipを送信することを好む:IIS、lighttpdのmod_compress

したがって、最も人気のあるサーバー(Apache)でdeflateを送信するには、事前にエンコードされたファイルを維持し、mod_negotiateを使用する必要があります(deflateを優先するには、型マップを使用する必要がある場合もあります)。

この手間が原因で、deflateが使用されることはほとんどないため、バグは可能性が高い gzipサポートよりもクライアントのdeflateサポートに存在します。

9
Steve Clay

詳細については、このWebサイトを確認してください: http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests


仕様によると、Deflateは実際には zlib (Web経由でコンテンツをストリーミングするために特別に開発された圧縮形式)...これはdeflateのラッパーです。

ただし、Internet Explorerは、HTTP 1.1 deflate(zlib)をraw deflateとして誤って実装します。したがって、サーバーが正しいHTTP 1.1デフレート(zlib)コンテンツをIEに送信すると、窒息します。

私はこのトピックを少し調査しましたが、常に最新のブラウザにrawdeflateを送信しても安全だと思われます... rawであり、zlibではありません。

詳細については、この記事を確認してください> Gzip vs Deflate(zlib)再考

したがって、gzipでdeflateを送信し続けることには十分な理由があると思います。

7
David Murdoch

私が知る限り(免責事項:私はここでは専門家ではなく、聞いたことだけです)、gzipdeflateと同じアルゴリズムを使用しますが、サイズが大きい(deflateに比べて)。ただし、deflateは、より少ないクライアントとプロキシでサポートされていると思います。

6
Mehrdad Afshari

私は同じことを思った:)。古い(おそらく古代の)ブラウザーの互換性に関係しているのではないかと思います。古いブラウザーは、特定のインスタンス(?)でmod_gzippedされたデフレコンテンツに忍び寄る可能性が高いことをどこかで読みましたが、これをグーグルすることで、グーグルするのをやめるのがおそらく最善であると結論づけました。

1
karim79

ActionScript 3はネイティブのdeflateをサポートしていますが、gzipの場合は外部ライブラリを使用する必要があります

0