Hatena::ブログ(Diary)

うまい棒blog このページをアンテナに追加 RSSフィード Twitter

2010-01-26

MultiViewsでコンテントネゴシエーション

Options MultiViewsで設定。Webブラウザ(つかHTTP Request Header)に応じて、同一のURIに対して、異なる内容を応答する。

ブラウザに応じて、圧縮済み/非圧縮のコンテンツを返したり、言語ごとのコンテンツを返したり。

例えばアクセスの多い大規模サイトで、

場合は、圧縮済みのファイルを用意しておけばいいらしい。mod_deflateの場合は動的に圧縮するので、CPU負荷がかかるから?


実験

圧縮済みのファイルを返す

ref.

clientAccept-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'

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hogem/20100126/1264515785
リンク元