まず、よく混乱する用語をいくつか定義しましょう。
deflate = compression_algorithm;
zlib = header + deflate + trailer;
gzip = header + deflate + trailer;
基本的に次のことができるライブラリを探しています。
if(method == "gzip"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.GZIP);
}
else if(method == "deflate"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.DEFLATE);
}
else if(method == "zlib"){
Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.ZLIB);
}
Webで使用するために3つの圧縮形式を比較可能にテストする方法を探しています。各フォーマットのデフレート圧縮アルゴリズムは、まったく同じ実装にしたいと思います。私はすでにzlib.netをハックして、コマンドで生のdeflateを強制的に実行しました(「文書化されていない機能」を介して)...ただし、gzipヘッダーとトレーラーを追加することは私のリーグから少し外れています。
これを行う.netライブラリを知っている人はいますか?
明確化:
HTTP 1.1のdeflate圧縮形式は、実際にはzlib圧縮形式です。Zlibは、deflateのラッパーです。常に2バイトのヘッダーと4バイトのトレーラーがあります(圧縮方法とレベルが同じ場合)。
Gzipは、内部でzlibと同じ圧縮データ形式を使用します...これはdeflateです(HTTP 1.1 deflate[zlib]ではなくrawdeflate)。私自身の予備テストによると、gzip圧縮されたデータはzlibの12倍のうち11倍です。
deflateは、データを圧縮するために使用される圧縮アルゴリズムです。デフレートされたデータの周りにラッパーメソッド(ヘッダーやトレーラーなど)がない場合、私はそれを「デフレート」と呼びます。おそらく、代わりに「生のデフレート」と呼ぶべきでした。
私はこれらの圧縮方法とWebブラウザー内でのそれらのサポートの分析を行っており、3つのタイプすべてに対して単一の圧縮方法を使用する必要があります。