Apacheのmod_deflateの設定変更
mod_deflateは圧縮してデータを送信することでトラフィックを抑えることができるが、「画像以外全て圧縮」のサンプルをそのまま使っていたため、不具合が発生。
不具合は、圧縮前と圧縮後でファイルサイズが変わるため、正確なファイルサイズがクライアントに通知されないことが原因。
このとき、PHPやPerlなどのWebアプリから、HTTPヘッダにファイルサイズを付加しても意味がなくなる。
具体的には、
1. ZIPファイルを再圧縮してしまう。
2. ブラウザでファイルのダウンロード画面のプログレスバーが表示されなくなる。
3. flashでプレローダーを設置している場合、プレローダが動作しない。
4. flashでストリーミング再生ができない。
なので、「数タイプのみ圧縮する」のサンプルに「古いブラウザのエラー処理」を付け加えたものを使うのがベスト。
まあこんな感じ。
<Location />
# DEFLATEの有効化 AddOutputFilterByType DEFLATE text/html text/plain text/xml
# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮 BrowserMatch ^Mozilla/4 gzip-only-text/html
# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない BrowserMatch ^Mozilla/4\.0[678] no-gzip
# 画像ファイルは圧縮しない SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|zip|png)$ no-gzip dont-vary
# プロキシサーバが圧縮未対応ブラウザへ圧縮ファイルを送信しない Header append Vary User-Agent env=!dont-vary
</Location>
PHPからファイルを出力するときは圧縮をOFFにするため、
apache_setenv('no-gzip','1');
を設定するとOK。

このブログのフィードを取得


