[Edit][Create New]
[ IndexPage / ネットとプログラミング / web296 / No56.txt ]

No56.txt

前回は、(擬似)日本語ドメインである「TOKYO自民党」と「社民党」が同じ
IPアドレスを指している、というところまででしたね。具体的には、こんな感じ
です。DNSを引くと、

% nslookup 'TOKYO自民党.jp.io'
Address: 210.146.53.28

% nslookup '社民党.jp.io'
Address: 210.146.53.28

このように双方とも同じIPアドレスを返してきます。そういえば、前回実験した
ところでは、自民社民の違いのみならず、その文字コードが、Shift-JISでも
EUCでもJISでも、全く同じIPアドレスが結果として出ていましたね。どうやって
も同じIPアドレス。ということは……。

% nslookup 'スポーツ平和党.jp.io' 
Address: 210.146.53.28

% nslookup '甘党.jp.io' 
Address: 210.146.53.28

% nslookup 'Webつくろー意外と知識のかなだまさかつがWeb.jp.io' 
Address: 210.146.53.28

なんと適当でもデタラメでも全く同じIPアドレスが返ってきます。どうやら、
DNSの設定で、どんなホスト名でも全く同じIPアドレスを返す設定になっている
ようです。ではなぜ'http://TOKYO自民党.jp.io'と
'http://社民党.jp.io'ではちゃんと別々のページが表示されるのでしょうか?

考えてみても始まらないので、早速<http://210.146.53.28/>にアクセスしてみ
ましょう。ブラウザのURL欄にURLを打ち込んで、サイトにジャンプしてみてくだ
さい。

……と、表示されたサイトは、「日本語ドメインインデックス」と書かれた政治
とはおよそかけ離れたデザインのサイト。どうしてこうなってしまうのでしょう
? ちゃんとURLで指定されたホストに接続したはずなのに……。

ここで、もういちどHTTPでの接続の手順を振り返って見ましょう。

まずは、URLに指定されたホスト名(例:社民党.jp.io)に対応するIPアドレスの
80番ポート(デフォルトの場合)に対して接続をします。この接続は、telnetコマ
ンドでシミュレートできることは以前解説しました。

% telnet 210.146.53.28 80 
Trying 210.146.53.28... 
Connected to iojs.ioj.co.jp. 
Escape character is '^]'.

そうすると、以上のようなメッセージが出て、入力待ちになるので、HTTPにした
がってリクエストを出します。

% telnet 210.146.53.28 80 
Trying 210.146.53.28... 
Connected to iojs.ioj.co.jp. 
Escape character is '^]'. 
GET / HTTP/1.1 ←リクエスト

HTTP/1.1 400 Bad Request (略:お説教が続く)

おっと、400のリザルト・コードが返ってエラーとなってしまいました。そうで
す、HTTP/1.1では、HTTPヘッダとして、接続先ホスト名を表すHost:行を指示す
る必要があるんでしたね。Host:行は、URL中に記述されたホスト名(例:社民党
.jp.io)を指定するように定義されています。やりなおしです。

% telnet 210.146.53.28 80 
Trying 210.146.53.28... 
Connected to iojs.ioj.co.jp. 
Escape character is '^]'. 
GET / HTTP/1.1 ←リクエスト
Host: 社民党.jp.io

HTTP/1.1 302 Found 
Date: Fri, 15 Mar 2002 20:22:59 GMT 
Server:Apache/1.3.9 Ben-SSL/1.37 (Unix) 
Pragma: no-cache 
Location:http://www.sdp.or.jp 
Transfer-Encoding: chunked 
Content-Type: text/html

おや? 成功したようですが、ずいぶんと短いですね? リザルト・コードを見てみ
ると、一般のリザルト・コードである200の代わりに、302 - Foundが返っていま
す。

さらに良く見てみると、

Location: http://www.sdp.or.jp

という行がありますね。これは、http://社民党.jp.io/ で表されるドキュメン
トが、実際には http://www.sdp.or.jp で取得できる事を表しています。実際に
http://www.sdp.or.jpをブラウザからリクエストしてみましょう。土井たか子党
首の笑顔が拝めたかと思います。

つまり、この擬似日本語ドメイン、日本語ホスト名からそれぞれのIPアドレスへ
の変換を行っているわけではなく、1つのWebサーバーがHost:行の文字列をみて、

「あ、Host:が社民党だから、http://www.sdp.or.jpを表示してね」

と、Webブラウザに指示、Webブラウザはそれに従ってページを表示しているだけ
だったのです。

つまり、これは実際に日本語ドメインが実現されているわけではなく、DNSに
*.jp.ioに対する問い合わせに全て同じIPアドレスを返させることによって誤動
作を吸収し、HTTPのHost:行とWebサーバーの仕様を利用して本来のページに割り
振っているだけだったのです。もちろん現在はURLやHost:行にだって日本語を使
用する事は許されていませんから、ブラウザによっては当然誤動作します。

ちなみにこのHost:行でWebサーバーが返す結果を割り振る挙動は、バーチャル・
サーバーなどで使われる手法で、1台のサーバーで複数のWebサイトを運営する場
合などに使われる比較的一般的なものです。

さて駆け足で擬似日本語ドメインの仕組みについて解説しましたがいかがだった
でしょうか? もうちょっと簡潔に、もうちょっと詳しく、などの要望があれば編
集部までお寄せください。

個人的にはこの手法は、RFCなどインターネットの主要な規約をすっとばかして
強引に実現させているためあまり好きではありませんが、DNSで同じIPアドレス
を返させて Hostで割り振る、という発想には正直胆を抜かれました (というか
思いっきり騙されました)し、今でも発想自体は大変ユニークで面白いものだと
思っています。