図2-7 「.com」にアクセスしたはずなのになぜか「.co.jp」に
図2-7 「.com」にアクセスしたはずなのになぜか「.co.jp」に
[画像のクリックで拡大表示]
図2-8 HTTPリクエストには情報が入る<BR>WebブラウザからのHTTPリクエストには,ユーザーの属性情報がいろいろ入る。Webサーバーはこれを見て,ユーザーに合わせたWebページを返すことができる。
図2-8 HTTPリクエストには情報が入る<BR>WebブラウザからのHTTPリクエストには,ユーザーの属性情報がいろいろ入る。Webサーバーはこれを見て,ユーザーに合わせたWebページを返すことができる。
[画像のクリックで拡大表示]
図2-9 ユーザーに合わせてデータを用意する方法は2種類&lt;BR&gt;一つの方法は,Webサーバーが別のURLにアクセスするようにWebブラウザに指示して,Webブラウザがアクセスし直す。もう一つは,サーバーがユーザーに合ったデータを返信する方法である。
図2-9 ユーザーに合わせてデータを用意する方法は2種類<BR>一つの方法は,Webサーバーが別のURLにアクセスするようにWebブラウザに指示して,Webブラウザがアクセスし直す。もう一つは,サーバーがユーザーに合ったデータを返信する方法である。
[画像のクリックで拡大表示]

URLが勝手に変わる理由
サーバーがユーザー情報を基にアクセス先を指示する

 Webページにアクセスしようとアドレス欄にURLを入力してリターン・キーを押す。すると,URLが勝手に変わってしまうことがある。

 例えば,有名な検索サイトのGoogle(グーグル)。Googleの英語ページを開こうとして,アドレス欄に「http://www.google.com/」と入力する。ところが,実際にアクセスすると(図2-7[拡大表示]),アドレス欄は「http://www.google.co.jp/」に変わり,日本語のWebページが表示される*

リクエストからユーザーを区別

 こうした現象が起こるのは,Webサーバーが,アクセスしてきたユーザーに合ったWebページにアクセスし直すように指示しているからである。この手法は「リダイレクト」と呼ばれる。

 Webブラウザが送信するHTTPリクエストには,送信元のさまざまな情報が含まれている。Webサーバーは,そうした情報を基にアクセスしてきたユーザーを分類して,最適なページにアクセスさせている(図2-8[拡大表示])。

 例えば,送信元IPアドレスは,パソコンがつながっているおおまかな場所を特定するのに利用される。IPアドレスは国や地域ごとに割り当てられているので,送信元IPアドレスを見れば,Webブラウザが動いているパソコンがある国を特定できるというわけだ。

 冒頭に例として挙げたGoogleのWebサーバーは,「http://www.google.com/」にアクセスしてきたパソコンの国を送信元IPアドレスで判断している*。日本国内からアクセスしてきたのなら,日本語のページにアクセスし直すように指示するのである。

 このほか,HTTPリクエストのメッセージ・ヘッダーにも,アクセス元の情報が含まれており,Webサーバーが利用することがある。よく使われるのは,Accept-Language(アクセプトランゲージ)ヘッダーである。これは,Webブラウザで使う標準言語を伝えるヘッダーである*。WebブラウザはHTTPリクエストのメッセージ・ヘッダーに「Accept-Language: ja」という行を加え,ブラウザの標準言語は日本語だと伝えるので,これを受信したWebサーバーは,言語設定に合わせたWebページを返信できる。

 ほかにも,User-Agent(ユーザーエージェント)ヘッダーも利用されることがある。これはWebブラウザの種類やバージョンなどの情報を伝える。例えば,Internet ExplorerとNetscape Navigatorで,それぞれ違うWebページにリダイレクトさせたり,パソコンからのアクセスと携帯電話機のブラウザからのアクセスを区別したりできる。

別のURLへの再接続を指示

 送信元IPアドレスやHTTPリクエストのヘッダー情報で,Webサーバーがアクセス元を区別することはわかった。それでは,WebサーバーがWebブラウザにどうやってリダイレクトの指示をしているのだろうか。

 ここでは,Webブラウザの言語設定を日本語にして,Webサーバーがそれを見てリダイレクト先を決める流れを例に説明しよう(図2-9a[拡大表示])。

 まずWebブラウザはWebサーバーにHTTPリクエストを送る。このリクエストには,Accept-Languageヘッダーで日本語(ja)が指定されている。

 Webサーバーは,そのHTTPリクエストの情報を見て,日本語のWebサイトにアクセスし直すように,HTTPレスポンスでWebブラウザに指示を出す。このHTTPレスポンスでは,最初の1行目(ステータス行)に「302 Found(ファウンド)」と書かれる*。これは,「別のWebサーバーにデータがあるので,そちらにアクセスし直してほしい」という意味である。

 さらに,このHTTPレスポンスでは,Location(ロケーション)ヘッダーでリダイレクト先のURLも伝える。

 Webブラウザは,このHTTPレスポンスのステータス行を見て,リダイレクトが必要だと判断する。さらにLocationヘッダーを見て,リダイレクト先のURLを知る。あとは,ブラウザがリダイレクト先のWebサーバーにリクエストを出してレスポンスをもらう通常のやりとりをするだけである。

 この結果,ブラウザのアドレス欄に入れたURLが勝手に書き換わり,その新しいURLのWebページが自動的に表示されることになる。

 なお,HTTPレスポンスのステータス行やヘッダーを使わないで,リダイレクトする方法もある。Webサーバーが返信するHTMLデータにリダイレクトの指示を書き込んでおく方法である(図2-9a参照)。

同じサーバーで複数のデータを用意

 リダイレクトを使わないで,アクセス元に合わせて異なるWebページをWebサーバーが返す場合もある。1台のサーバーに,アクセス元に合わせたWebページをあらかじめ複数用意しておく方法である(図2-9b[拡大表示])。

 アクセス元を区別する方法は,リダイレクトする場合と同じで,送信元IPアドレスやHTTPリクエスト中のヘッダー情報を利用する。

 そしてWebサーバーは,自分のハードディスクからアクセス元に合わせたWebページのデータを選び出し,HTTPレスポンスを返信する。

 この方法では,リダイレクト先をブラウザに通知しないので,たとえ違うWebページが表示されても,URL自体は変わらない。

 WebサーバーはHTTPリクエストに書かれた情報からアクセス元を区別して,返信するレスポンスを使ってリダイレクトを指示していたのである。