GZip、deflate、sdch圧縮(ネットピッキング)



Gzip Deflate Sdch Compression



GZipとデフレート:

Gzipはデフォルトのデータ形式であり、現在はdeflateアルゴリズムのみを使用してデータ部分を圧縮しています
Deflateは、ハフマンコーディングを強化した圧縮アルゴリズムです。

Deflateは、gzipで解凍されたコードとほぼ同じであり、1つのコードに組み合わせることができます。
唯一の違いは次のとおりです。

DeflateはinflateInit()を使用し、gzipはinflateInit2()を使用して初期化します。これはinflateInit()よりも1つ多いパラメーターです。-MAX_WBITSは、生のdeflateデータを処理することを意味します。 gzipデータのzlib圧縮データブロックには2バイトのzlibヘッダーがないためです。 inflateInit2を使用するには、zlibライブラリがzlibヘッダーを無視する必要があります。 zlibのマニュアルでは、windowBitsは8..15である必要がありますが、実際には、他の範囲のデータには特殊効果があります。生の収縮の負の数など、zlib.hのコメントを参照してください。
Apacheのdeflateバリアントにはzlibヘッダーがない可能性があり、それを処理するには偽のヘッダーを追加する必要があります。つまり、MSエラーデフレート(生のデフレート)です。 zlibヘッダーの最初のバイトは0x78であり、最初のバイトと結合された2番目のバイトの2バイトは31で割り切れる必要があります。詳細については、rfc1950を参照してください。たとえば、Firefoxのzlib偽のヘッダーは0x7801であり、python zlib.compress()は0x789cのヘッダーになります。

Deflateは最も基本的なアルゴリズムです。 gzipは、deflateの生データの前に10バイトのgzheaderを追加し、最後に8バイトのチェックバイト(オプションのcrc32およびadler32)と長さ識別子バイトを追加します。

SDCH:

ネットワーク伝送を高速化するために、gzipは一般的にテキストを圧縮するために使用されることを私たちは知っています。最新バージョンのchromeを使用してページにアクセスし、ネットワークコントロールパネルを開いてhttpヘッダーを確認すると、リクエストヘッダーのAccept-Encodingがgzip、deflateではなく、追加のsdchであることがわかります。 gzip、deflate、sdchになります。図:



SDCHとは何ですか?

Sdchは、Shared Dictionary Compression over HTTPの略語であり、辞書圧縮アルゴリズムによって各ページの同じコンテンツを圧縮して、同じコンテンツの送信を減らします。たとえば、Webサイトには通常、共通のヘッドとテールがあり、一部のサイドバーも共通です。以前の方法では、これらの共通情報は各ページを開くときに再ロードする必要がありますが、SDCH圧縮を使用する場合、共通コンテンツは1回しか送信できません。



Sdchは主に、最初のリクエスト、ダウンロード辞書、および後続のリクエストの3つの部分に分かれています。

このメソッドは元々、GoogleツールバーのIE用に用意されていました。 Chromeは完全にサポートされるようになりましたが、まだWebサイトを見つけていません。

SDCHとajax + pushState

SDCH圧縮方式は、同じコンテンツの送信を減らすことです。同時に、前に紹介したajax + pushStateも同じコンテンツの送信を減らし、達成したい効果は同じです。 SDCHのみがGoogleからのものです。今後しばらくの間、Chromeブラウザでサポートされる可能性がありますが、pushStateはHTML5の標準です。 ChromeとFirefoxですでにサポートされており、ますます多くのブラウザがサポートするようになります。



個人的には、SDCHはあまり発展していないかもしれないと思いますが、新しい方向性として研究し、適切なタイミングで標準に追加して、ネットワーク伝送をますます高速化することができます。

転載:https://www.cnblogs.com/stringboy/p/4244676.html