2009-08-09 3 views
8

HTML関連のファイル形式は、GZip圧縮、サーバー側(Apacheサーバーではmod_gzip)を使用して圧縮され、互換性のあるブラウザで圧縮解除されていることがわかります。 ( "コンテンツエンコーディング")サーバサイドGZippingはどのように機能しますか?

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

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

答えて

9

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

ん:それはかなり頻繁例えば、CSSやJSファイルのために使用されている - それらが原因JSフレームワークやフルJSアプリケーションの、ウェブサイト(画像を除く)で構成されていることが最大のものの間であるように、しませんそれは大きな利益を表します!

実際には、どのようなテキストベースのフォーマットでもかなり良い圧縮が可能です。(反対側の画像は、一般的に既に圧縮されているためイメージできません);アヤックス - 要求があまりにも圧縮されているから、時々、JSONデータを返す - それはテキストデータですが、やっぱ;-)

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

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


は、ここで私は私のブログ上で使用(mod_deflateを使用)のApache 2のコンフィギュレーションのサンプルです:

ここ
<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たいです/ JSを圧縮する。

そして、ここでは同じことで、プラス/マイナスの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ファイルを圧縮したいが画像は必要ない。


あなたが同じように圧縮するあなたは、カンマ区切りのデータが必要な場合は、それがコンテンツタイプだか、それはそれのためにgzipで圧縮を有効にするには、あなたのウェブサーバの設定に拡張機能のいずれかを追加する必要があります。

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

ブラウザに直接返されるコンテンツについては、Firefoxの拡張子FirebugまたはLiveHTTPHeadersが必須です。

ブラウザの標準的な通信方法を通らないコンテンツの場合、それはより困難かもしれません。最後に、Wiresharkのようなものを使って、実際にパイプを通っているものを「嗅ぐ」ようにしなければならないかもしれません。シルバーやFlash、 のようなプラットフォームについて

は、彼らがそのようなデータをダウンロードし、それが圧縮されます/自動的にブラウザ/ランタイムによって を解凍?

彼らは圧縮されたコンテンツをサポートして示すAcceptヘッダーを送信する場合、Silverlightとフラッシュについてのご質問に答えるために、Apacheはmod_deflateをかmod_gzipのを使用します。彼らが圧縮をサポートしていない場合、彼らはヘッダーを送信しません。それは "ちょうどうまくいく"でしょう。 - Nate

+6

ちょうど将来の読者のために明確にする:HTTPのいずれかのタイプをデータを圧縮することができます。画像のように既に圧縮されているデータの場合、それはちょっと悪い考えです。 @Sean>が正確に; –

+0

;私は画像を再圧縮することによって何かが得られるかどうか疑問に思います... btw ...それをテストしたことはありません^^(私はゲインが実際には最小限になり、ヌルではないと思っています。 ) –

+0

さて、私は圧縮されていないBMP画像を見たことがあります... –

5

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

4

ブラウザは、理解の方法を理解している圧縮の種類とともに「Accept-Encoding」ヘッダーを送信します。サーバーはuser-agentと一緒にこれを調べ、結果のエンコード方法を決定します。一部のブラウザでは理解できる内容があるため、ヘッダー内の「収縮」を検索するよりも複雑です。

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

動的PHPページからの応答を確実に圧縮できます。最も簡単な方法は、すべてのPHPページの先頭に:

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

を追加することです。もちろん、PHPの設定で設定する方が良いでしょう。

簡単Googleで見られる多くのテストページ、があります。

関連する問題