HTTPヘッダと環境変数

同じような内容で気になる記述を二つのページで見かけたのでメモ。

おのひろきおんらいんの日誌の6月24日分、Camino 0.8 で言語設定より:

これで環境変数 HTTP_ACCEPT_LANGUAGE に「ja-jp, ja;q=0.97, en-us;q=0.93, en;q=0.90」という値が入るようになり,もしいろいろな言語のページが用意されている場合は,まず日本語をリクエストします.

Black Box > Diaryの6月27日分、コンテントネゴシエーションと恒久リンクのジレンマより:

それを UA は一時的に自らの HTTP_ACCEPT_LANGUAGE (fr,en;q=0.7,de;q=0.3 など) の先頭に置き、そして、コンテントネゴシエーションを行うサーバーはより適した言語のファイルを渡します。

ブラウザ(UA)が設定するのは、HTTPのリクエストヘッダであるところのAccept-Languageヘッダではないかと思います。で、環境変数はブラウザからの要求リクエストを受けたウェブサーバが設定するものかと。

何のためにウェブサーバが環境変数を設定するかと言えば、サーバがブラウザからの要求を受けた際に、ウェブサーバ自身とは別のプログラムが要求を処理することがあり、ブラウザからの要求でサーバが得た様々な情報を外部プログラムに引き渡すために、サーバは特定の環境変数に値を設定し、プログラムは環境変数から情報を取得する、ということが行われるのであって(そのような、ウェブサーバと外部プログラムが情報を遣り取りするための仕組みのひとつがCGI、ということだったような)。

なので、ウェブサーバ自身が直接ブラウザからの要求を処理する場合、例えばお二方が説明している(おそらくApacheにおける)拡張子を用いた言語コンテントネゴシエーションの場合には、環境変数はあまり関係ないのではないか(少なくとも見かけ上は)と思いました。

要するに、ブラウザ/UAが設定するのは自らが送信するHTTPリクエストヘッダであり、サーバの環境変数を直に変えるわけではないので、説明としては「これでAccept-Languageヘッダに……という値が入るようになり」「それをUAは一時的に自らのAccept-Languageヘッダの先頭に置き」といった感じで述べた方が適切ではないかと考えた次第です。

(2004年6月30日)

北村曉 kits@akatsukinishisu.net