DEFLATE
出力フィルタを提供します。これはサーバからの出力を、ネットワークを
通してクライアントに送る前に圧縮することを可能にします。
下にせっかちな人向けの設定例を示します。しかしぜひ時間を取って 下記の詳細もお読み下さい!
圧縮機能は DEFLATE
フィルタ
により実装されています。以下のディレクティブはそのディレクティブのある
コンテナ中のドキュメントを圧縮するようにします:
よく使われているブラウザでは、すべてのコンテンツに対する
圧縮を扱えるわけではありません。ですから、gzip-only-text/html
ノートを 1
にして、html ファイルに対してのみ
圧縮が働くようにした方がよいかもしれません (以下参照)
この値を 1
以外の値に設定した場合は無視されます。
通常、特定のMIMEタイプについてのみ圧縮したいのであれば、
全てのファイルタイプでの圧縮に問題を抱えているブラウザに対しては、
no-gzip
ノートをセットし、圧縮が行なわれないようにします。
no-gzip
と gzip-only-text/html
を組み合わせることで上手く対処できます。
この場合、前者が後者をオーバーライドします。
上記の設定例の抜粋を
次に示しますのでご覧下さい。
まず始めに User-Agent
文字列から Netscape Navigator
4.x であるかどうかを調べます。これらのバージョンでは、
text/html
以外のタイプの圧縮を扱うことができません。
4.06, 4.07, 4.08 は html ファイルの伸張にも問題を抱えています。
ですからこれらに対しては、完全に deflate フィルタをオフにします。
3 番目の User-Agent
ヘッダを "MSIE"
(\b
は「単語の境界」を意味します) の追加文字で検査して、
これ以前に設定した制限を再び解除します。
DEFLATE
フィルタは必ず、PHP や SSI といった RESOURCE
フィルタの後になります。
DEFLATE フィルタは内部的なサブリクエストを関知しません。
DEFLATE
フィルタを入力フィルタチェインに組み込みます。
例えば次のようになります。
この設定であれば、Content-Encoding: gzip
ヘッダを含むリクエストが来ると、本体は自動的に伸張されます。
gzip リクエスト本体を送信するブラウザはあまりありません。
しかし、例えば WebDAV
クライアントの幾つかなど、特別なアプリケーションでリクエストの
圧縮を実際にサポートしているものもあります。
リクエスト本体それ自体を評価する場合は、Content-Length
ヘッダを信用しないでください。Content-Length ヘッダは、
クライアントから送信されるデータの長さを反映しているのであって、
伸張されたデータストリームのバイトカウントではありません。
Vary: Accept-Encoding
HTTP 応答ヘッダを送信して、適切な Accept-Encoding
リクエストヘッダを送信するクライアントに対してのみ、
プロクシサーバがキャッシュした応答を送信するように注意を喚起します。
このようにして、圧縮を扱うことのできないクライアントに
圧縮された内容が送られることのないようにします。
もし特別に何かに依存して除外したい場合、例えば User-Agent
ヘッダなどに依存している場合、手動で Vary
ヘッダを設定して、
追加の制限についてプロクシサーバに注意を行なう必要があります。
例えば User-Agent
に依存して DEFLATE
を追加する典型的な設定では、次のように追加することになります。
リクエストヘッダ以外の情報 (例えば HTTP バージョン)
に依存して圧縮するかどうか決める場合、
Vary
ヘッダを *
に設定する必要があります。
このようにすると、仕様に準拠したプロクシはキャッシュを全く行なわなくなります。
ログからもっと精密な値を抽出したい場合は、type 引数を使用して、データタイプをログのメモとして残すように指定できます。 type は次のうちの一つです。
Input
Output
Ratio
出力 / 入力 * 100
) をメモに保存する。
type 引数を省略した場合は、これがデフォルトとなります。まとめると、次のようにログを取ることになるでしょう。
値は 1 (低圧縮) から 9 (高圧縮) です。