- http://httpd.apache.org/docs/2.2/ja/mod/mod_negotiation.html
- http://httpd.apache.org/docs/2.2/ja/content-negotiation.html
- http://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html
Options MultiViewsで設定。Webブラウザ(つかHTTP Request Header)に応じて、同一のURIに対して、異なる内容を応答する。
ブラウザに応じて、圧縮済み/非圧縮のコンテンツを返したり、言語ごとのコンテンツを返したり。
例えばアクセスの多い大規模サイトで、
- トラフィックを減らしたい
- CPUリソースを有効に使いたい
場合は、圧縮済みのファイルを用意しておけばいいらしい。mod_deflateの場合は動的に圧縮するので、CPU負荷がかかるから?
実験
圧縮済みのファイルを返す
ref.
clientのAccept-Encodingヘッダの有無で。
最近でいうとprototype.jsが70KByteあるので、ブラウザがgzip圧縮に対応している場合に圧縮済みのprototype.js.gzを返したい、ということがあるらしい。
アクセスするURL: /index.html
用意するファイル:
非圧縮時は拡張子を2個重ねるのがポイント。index.htmlのファイルが存在していると、圧縮対応ブラウザで/index.htmlにアクセスした場合に、圧縮済みのindex.html.gzではなく、index.htmlそのものを返すっぽい。
おまけ: mod_rewriteで判定
ref.
apacheのMultiViewsを使わずにmod_rewriteのRewriteCondでAccept-Encoding headerや、fileを確認してやってるぽい。なるほどね。
RewriteEngine on RewriteCond %{HTTP:Accept-Encoding} gzip RewriteCond %{REQUEST_FILENAME} !\.gz$ RewriteCond %{REQUEST_FILENAME}\.gz -s RewriteRule .+ %{REQUEST_URI}.gz ForceType text/javascript AddEncoding x-gzip .gz
言語によって応答するファイルを変更する
Accept-Languageヘッダ。
サーバでindex.html.jaとindex.html.enを用意する。で、AddLanguageで言語の設定をする。
AddLanguage ja .ja AddLanguage en .en
$ curl http://localhost/index.html -H 'Accept-Language: ja' $ curl http://localhost/index.html -H 'Accept-Language: en'