7

HTML関連のファイル形式は、サーバー側のGZip圧縮を使用して( Apacheサーバーではmod_gzipによって)圧縮され、互換性のあるブラウザーによって解凍されることをご存知かもしれません。(「コンテンツエンコーディング」)

これはHTML/XMLファイルに対してのみ機能しますか?私のPHP/Perlファイルがいくつかの単純なコンマ区切りデータを生成し、それをブラウザに送信するとしますが、それはデフォルトでエンコードされますか?

SilverlightやFlashなどのプラットフォームについてはどうでしょうか。そのようなデータをダウンロードすると、ブラウザー/ランタイムによって自動的に圧縮/解凍されますか?これをテストする方法はありますか?

4

3 に答える 3

9

これはHTML/XMLファイルに対してのみ機能しますか?

いいえ:たとえば、CSSファイルやJSファイルによく使用されます。これらはWebサイトで構成されている最大のものの1つであり(画像を除く)、JSフレームワークとフルJSアプリケーションがあるため、大きなメリットがあります。

実際、テキストベースの形式はどれも非常にうまく圧縮できます(反対に、たとえば、画像は一般にすでに圧縮されているため、画像を圧縮することはできません)。時々、Ajaxから返されたJSONデータ-リクエストも圧縮されます-結局のところ、それはテキストデータです;-)

私のPHP/Perlファイルがいくつかの単純なコンマ区切りデータを生成し、それをブラウザに送信するとしますが、それはデフォルトでエンコードされますか?

それは構成の問題です:その種のコンテンツを圧縮するようにサーバーを構成した場合、おそらく圧縮されます:-
)(ブラウザーがgzipでエンコードされたデータを受け入れると言った場合)


ブログで使用しているApache2の構成例(mod_deflateを使用)は次のとおりです。

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/xml
</IfModule>

ここでは、html / xml / css /JSteを圧縮したいと思います。

そして、これは同じことですが、Apache 1(mod_gzip)で一度使用したいくつかの構成オプションをプラス/マイナスします。

<IfModule mod_gzip.c>
    mod_gzip_on                   Yes
    mod_gzip_can_negotiate        Yes

    mod_gzip_minimum_file_size    256
    mod_gzip_maximum_file_size    500000

    mod_gzip_dechunk              Yes

    mod_gzip_item_include         file       \.css$
    mod_gzip_item_include         file       \.html$
    mod_gzip_item_include         file       \.txt$
    mod_gzip_item_include         file       \.js$
    mod_gzip_item_include         mime       text/html

    mod_gzip_item_exclude         mime       ^image/
</IfModule>

ここで気付くことができるのは、ファイルを圧縮するのに小さすぎる(ゲインはそれほど重要ではない)または大きすぎる(圧縮するにはCPUを消費しすぎる)ことを望まないということです。そして、css / html / txt / jsファイルを圧縮したいのですが、画像は圧縮しません。


カンマ区切りのデータを同じ方法で圧縮する場合は、コンテンツタイプまたは拡張機能のいずれかをWebサーバーの構成に追加して、gzip圧縮をアクティブにする必要があります。

これをテストする方法はありますか?

ブラウザに直接返されるコンテンツの場合、Firefoxの拡張機能であるFirebugまたはLiveHTTPHeadersは必須です。

ブラウザの標準的な通信方法を経由しないコンテンツの場合、それは難しいかもしれません; 結局、Wiresharkのようなものを使用して、実際にパイプを通過しているものを「スニッフィング」する必要があるかもしれません...それで頑張ってください!

SilverlightやFlashなどのプラットフォームについてはどうでしょうか。そのようなデータをダウンロードすると、ブラウザー/ランタイムによって自動的に圧縮/解凍されますか?

SilverlightとFlashに関する質問に答えるために、圧縮コンテンツをサポートしていることを示すAcceptヘッダーを送信する場合、Apacheはmod_deflateまたはmod_gzipを使用します。圧縮をサポートしていない場合、ヘッダーは送信されません。それは「うまくいく」でしょう。–ネイト

于 2009-08-09T18:25:57.623 に答える
5

組み込みで同じことを行うため、Apache のmod_deflate方がより一般的だと思います。mod_gzip(上にリンクされている)のドキュメントをmod_deflate見ると、MIME タイプに基づいて、圧縮するファイルの種類を簡単に指定できることがわかります。一般に、HTML、CSS、XML、および JavaScript を圧縮する価値があります。画像は既に圧縮されているため、圧縮のメリットはありません。

于 2009-08-09T18:34:15.937 に答える
4

ブラウザーは、理解できる圧縮の種類を含む "Accept-Encoding" ヘッダーを送信します。サーバーはこれをユーザーエージェントと一緒に見て、結果をエンコードする方法を決定します。一部のブラウザーは、理解できることについて嘘をつくため、ヘッダーで「deflate」を検索するよりも複雑です。

技術的には、コンテンツを含む HTTP/2xx レスポンスは、有効なコンテンツ エンコーディング (gzip、zlib、deflate など) を使用してコンテンツ エンコードできますが、実際には一般的な画像タイプに圧縮を適用するのは無駄です。 .

動的 PHP ページからの応答は間違いなく圧縮できます。最も簡単な方法は、次を追加することです。

<?php ob_start("ob_gzhandler"); ?>  

すべての PHP ページの先頭に。もちろん、PHP 構成を使用してセットアップすることをお勧めします。

多くのテスト ページがあり、Googleで簡単に見つけることができます。

于 2009-08-09T18:41:51.803 に答える