Wadslog

[Apache] mod_deflateでコンテンツをgzip圧縮して通信する 2

Sep 9, 2008

前回の続き。 proxyサーバを経由してアクセスしている場合に、mod_deflateでコンテンツを圧縮して通信していると問題になるのがproxyのキャッシュです。 アクセスによっては、gzip圧縮非対応のブラウザがgzipされたコンテンツを受け取ってしまうようなケースが出てきます。 対策として、サーバからのレスポンスにVaryというヘッダーを追加すると、このヘッダで設定した項目に従ってproxyへキャッシュさせるかどうかを指定させられます。 例えば、``` Vary: Accept-Encoding

というヘッダを追加すると、リクエストヘッダにAccept-Encodingという名前のヘッダの値ごとにキャッシュをするようになります。 Accept-Encodingヘッダは、クライアントがサポートしている圧縮方法を表しています。もしサポートしていない場合はこのヘッダは見つかりません。よって、 Vary: Accept-Encoding

というヘッダがレスポンスにあれば、少なくともあgzip対応、非対応のクライアントで使用するキャッシュを分けることができます。こうすれば、gzip非対応のクライアントにgzipされたコンテンツが渡されることはなくなります。 ちなみに、上記のヘッダはApache2.xのmod\_deflateではデフォルトで付加されるようです。 VaryヘッダにAccept-Encodingだけでなくその他のヘッダ(例えばUser-Agent)も加えたい場合には、以下のように Header append Vary ヘッダ名

の記述をhttpd.confに加えます。また、新しくVaryヘッダを設定しなおす場合には Header set Vary ヘッダ名

と記述します。 このような Header xxx の設定を行うには、以下のようにしてmod\_headersモジュールを組み込みます。 % ./configure –enable-headers % make clean % make

目次

su

make install

comments powered by Disqus