水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > IE7でコンテント・ネゴシエーションが残念なことになる件

IE7でコンテント・ネゴシエーションが残念なことになる件

2008年8月1日(金曜日)

IE7でコンテント・ネゴシエーションが残念なことになる件

Accept-Language によるコンテント・ネゴシエーションが IE7 でうまく動作しないらしいというお話があり、いろいろ調査。

問題を簡潔にまとめると、「IE7で複数の言語を設定している場合に、その設定の順位が無視されているように見える」という感じ。たとえば、コンテンツ側で日本語と英語を用意しているとき、以下のような動作になります。

日本語、英語の順で設定したら日本語を返してほしいのに、何故か英語が返って来るという。

この原因は、「IEBlog : Accept-Language Header for Internet Explorer 7 (blogs.msdn.com)」に書かれている Accept-Language の仕様変更です。IE6 までは言語設定に「日本語 [ja]」という選択肢があったのですが、IE7 ではしれっと「日本語 [ja-JP]」になっており、他の言語についても同様ということですね。

恐ろしいことに「日本語 [ja]」という選択肢はなくなっているので、Accept-Language: ja を送りたい場合は "ja" と手入力しなければなりません。普通の人は手入力しないと思いますから ja-JP の方しか送られないわけです。

で、Accept-Language を受け取る Apache の側ではこんな感じになっています。

このおかげで、Accept-Language に ja-JP と en-US があり、コンテンツ側で ja と en が用意されているという状況では、qvalueにかかわらず ja と en のプライオリティは全く同一になってしまいます。結果として、言語の順番が無視されているように見えるわけです。

間違いではない気もしますが直感に反する動作ですね。mod_negotiation を修正してほしい感じがしますが……。

関連する話題: Web / Internet Explorer / Apache

最近の日記

関わった本など