Apache で gzip 圧縮されたファイルを返す
もしかして、Safari って Content-type: application/x-javascript 、 Content-Encoding: gzip にしておいても gzip 圧縮された JavaScriptソースを正しく扱えなかったりするんだろうか。そうでなければ普通に Content Negotiation でいいと思うのだが。こんなの
% cat index.html | grep prototype <script type="text/javascript" src="prototype"></script> % ls index.html prototype.js prototype.js.gz
これで Content Negotiaion を有効にしておけば Accept-Encoding に gzip が含まれるときだけ gzip 圧縮された prototype.js.gz を、 含まれないときは prototype.js を返すようになる。
prototype.js に直接アクセスされたときも透過的に prototype.js.gz を返したければ mod_rewrite を使う。
RewriteEngine on RewriteCond %{HTTP:Accept-Encoding} gzip RewriteCond %{REQUEST_FILENAME} !\.gz$ RewriteCond %{REQUEST_FILENAME}\.gz -s RewriteRule .+ %{REQUEST_URI}.gz
mod_rewrite を有効にして、上記設定を httpd.conf なり .htaccess なりに書いておけば 別に JavaScript に限らず HTML だろうが CSS だろうが必要に応じて gzip 圧縮されたほうを返してくれる。
しかし、元記事は gzip 圧縮されたファイルを決めうちで指定しておいて Safari の場合と Accept-Encoding に gzip が無い場合は元ファイルを返す設定になっているけど、それって考え方が逆だよなあ。