March 27, 2007ApacheのMultiViewsで拡張子が有るリクエストでもgzが働くようにする[Computer]
タイトルが呪文のようになっていますが、これ以上わかりやすいタイトルは思いつきませんでした。結局何の話かというと、Apacheのコンテントネゴシエーション(Content Negotiaion)機能、つまりHTTPサーバが持つコンテンツの中でクライアントに対して最適なコンテンツを自動的に選択して応答する機能についてです。 ことの発端は、prototype.jsでAjaxでも利用して少しサイトを華やかしようかと思った時でした。しかしこのprototyp.js、JavaScriptのくせに70KByteもサイズがあります(Ver.1.5.0)。これは少し嫌だなと思い調べてみたところ、gzip圧縮をかけてサイズを減らす方法があることを知りました。
この過程においてApacheのコンテントネゴシエーションの機能を知りました。つまり具体的にはMultiViewsというOptionを設定しておくことによって、prototype.jsを要求された際、クライアントがgzip圧縮をサポートしている場合はgzip圧縮されたprototype.js.gzを、そうでない場合は非圧縮のprototype.jsを返すということが可能なようです。しかしながらこれを実現するためには、デフォルトの設定では要求されるファイル、すなわちここではprototype.jsが存在しないことが必須条件(Apacheのマニュアルのコンテントネゴシエーション::MultiViews)であり、そのために多くの方は以下のどちらかの方法をとっていることがわかりました。
しかし残念ながらApacheのコンパイルでmod_rewriteを有効にしていなかったので、1番目の方法はできれば避けたいです。かといって、2番目の方法を採用しても、今までリンクは拡張子ありで記述していることがほとんどであったので、別のファイルにこの方法を適用する際に拡張子を削る作業に追われるのは目に見えています。そこで今回の本題である、なんとか拡張子が付いている状態であってもコンテンツネゴシエーションが働くようにしたい、という要望がでてきました。 解決策はとても単純でした。prototype.jsというファイル名をやめてprototype.js.jsにリネームします。こうすることで、prototype.jsに対する要求は、クライアントが圧縮に対応している場合はgzip圧縮のprototype.js.gzが、対応していない場合は非圧縮のprototype.js.jsが返るようになりました。 コメント
コメントする
|
スポンサード リンク
|