図1-1 Webアクセスは5ステップで完了<BR>WebブラウザとWebサーバーやりとりは,5ステップに分けて考えると理解しやすい。
図1-1 Webアクセスは5ステップで完了<BR>WebブラウザとWebサーバーやりとりは,5ステップに分けて考えると理解しやすい。
[画像のクリックで拡大表示]
図1-2 アクセス先はURLで指定&lt;BR&gt;Webページのデータの場所は,世界中で一意に決まるURLで指定する。
図1-2 アクセス先はURLで指定<BR>Webページのデータの場所は,世界中で一意に決まるURLで指定する。
[画像のクリックで拡大表示]
図1-3 WebブラウザはHTTPリクエストでデータを要求する&lt;BR&gt;Webページのデータを要求するため,WebブラウザはHTTPリクエストをWebサーバーに送る。もっとも重要なのは1行目にあるリクエスト行だが,以下に続くメッセージ・ヘッダーやメッセージ・ボディにもさまざまな付加情報が入る。
図1-3 WebブラウザはHTTPリクエストでデータを要求する<BR>Webページのデータを要求するため,WebブラウザはHTTPリクエストをWebサーバーに送る。もっとも重要なのは1行目にあるリクエスト行だが,以下に続くメッセージ・ヘッダーやメッセージ・ボディにもさまざまな付加情報が入る。
[画像のクリックで拡大表示]
図1-4 リクエストに応じて,WebサーバーがHTTPレスポンスを返す&lt;BR&gt;Webサーバーは,ブラウザから受け取ったHTTPリクエストに応じて,HTTPレスポンスを返信する。HTTPレスポンスの構造は,HTTPリクエストとほぼ同じだが,内容は異なる。
図1-4 リクエストに応じて,WebサーバーがHTTPレスポンスを返す<BR>Webサーバーは,ブラウザから受け取ったHTTPリクエストに応じて,HTTPレスポンスを返信する。HTTPレスポンスの構造は,HTTPリクエストとほぼ同じだが,内容は異なる。
[画像のクリックで拡大表示]
図1-5 Webサーバーの仕事は,要求されたデータを探して返すこと&lt;BR&gt;Webブラウザからのリクエストはデータのパスを示しているが,それは,実際のサーバー・マシンのディレクトリとは無関係である。
図1-5 Webサーバーの仕事は,要求されたデータを探して返すこと<BR>Webブラウザからのリクエストはデータのパスを示しているが,それは,実際のサーバー・マシンのディレクトリとは無関係である。
[画像のクリックで拡大表示]
図1-6 Webページを表示するには何度もやりとりする&lt;BR&gt;Webブラウザは最初にHTMLデータを受け取るが,それだけではWebページは完成しない。HTMLデータを調べて,画像の挿入を示す<IMG>タグを見つけるたびに,画像データをWebサーバーに要求する。これを繰り返すことで,Webページが出来上がる。
図1-6 Webページを表示するには何度もやりとりする<BR>Webブラウザは最初にHTMLデータを受け取るが,それだけではWebページは完成しない。HTMLデータを調べて,画像の挿入を示す<IMG>タグを見つけるたびに,画像データをWebサーバーに要求する。これを繰り返すことで,Webページが出来上がる。
[画像のクリックで拡大表示]

このPart1は,Webアクセスの基本をしっかりと把握することが目的である。WebブラウザとWebサーバーのやりとりの流れを押さえて,Webアクセスの実際の姿を理解する“基礎体力”を養おう。

HTTPによるリクエストとレスポンスを確認

 Webブラウザが要求を送り,Webサーバーが応答を返す——。Webアクセスを一言で表現すると,こうなる。こうした単純なやりとりの手順や内容を決めているのが,HTTP*というプロトコルである。このHTTPがWebアクセスの根幹と言える。

5段階に分けて考えよう

 まずはWebアクセス全体の流れを簡単に確認しておこう(図1-1[拡大表示])。ここでは,流れを五つのステップに分けて考えてみる。

ステップ1 : ユーザーがWebブラウザにURLを入力する
ステップ2 : WebブラウザがリクエストをWebサーバーへ送る
ステップ3 : Webサーバーがリクエストを解析して処理する
ステップ4 : WebサーバーがレスポンスをWebブラウザへ返信する
ステップ5 : Webブラウザが受信データを解析して表示する

 ステップ1は,ユーザーがWebブラウザのアドレス欄にURLを入力して,リターン・キーを押す作業だ。明示的にURLを入力する代わりに,Webページのリンクをクリックしても同じである。ユーザーが手を動かすのは,ここまでで,ステップ2以降はWebブラウザやWebサーバーの処理になる。

 ステップ2は,WebブラウザがWebページのデータをWebサーバーに要求する。ここではHTTPリクエストというメッセージがWebサーバーに送られる。

 次のステップ3は,処理がWebサーバーに移る。Webサーバーは,ブラウザから受け取ったHTTPリクエストを読み取り,要求内容を分析する。

 そして要求されたデータを返信する。これがステップ4だ。この返信データは,HTTPレスポンスと呼ばれる。

 最後のステップ5は,Webブラウザがサーバーから受け取ったデータを解析し,Webページとしてパソコンに表示する。このWebページのデータはHTMLと呼ばれる書式で記述されている。このHTMLデータがWebページの実体である。

 この五つのステップの流れをきちんと理解すれば,Webアクセスの基礎が身につく。カラクリを理解するうえでも重要なので,各ステップでどのような処理が進むのかを詳しく見ていこう。

Webページの場所をURLで指定する

 URLという用語は,インターネットに普段から接している読者なら,よく耳にしているだろう。uniform(ユニフォーム) resource(リソース) locator(ロケータ)の略で,Web上のデータの場所を示す標準的な表記法である。この表記法を使えば,インターネット上に散らばる膨大なWebページのデータ一つひとつを特定できる。

 Webブラウザのアドレス欄に入力するURLは,「http://nnw.nikkeibp.co.jp/nnw/index.html」のように書く(図1-2[拡大表示])。このうち,先頭のhttpはスキームと呼ばれ,WebブラウザがWebページのデータにアクセスするための手段(プロトコル)を表す。国際的な調整機関のIANA(アイアナ)*が名称を定めており,たいていはプロトコル名がそのままスキーム名になる。通常のWebアクセスでは,プロトコルとしてHTTPを使うので,httpになる。

 コロン(:)の後ろが,データの場所を示す部分である。コロンの直後にある2個のスラッシュ(//)は,そのあとに続く部分がホスト名であることを示す*。ホスト名とは,Webサーバーの名前のことで,ドメイン名*を使うのが一般的である。ただし,インターネット上の場所がわかればよいので,IPアドレスを使うこともある。

 ホスト名の後ろにはポート番号*が入ることになっているが,省略されるのが一般的である。Webサーバーが待ち受けているポート番号は,通常80番と決まっている*。このため,URLでポート番号を省略すると,Webブラウザは80番ポートにアクセスする。

 ホスト名の後ろの部分は「パス」と呼ばれる。これは,Webサーバー上でのデータの場所を指す。

人が読めるテキストをやりとり

 アドレス欄にURLを入れてリターン・キーを押すと,WebブラウザはURLで指定されたデータをWebサーバーに要求する。このときWebブラウザがWebサーバーに送るのが,HTTPリクエストである。

 HTTPリクエストはテキストで出来上がっていて,人がそのまま読むことができる。通常,このHTTPリクエストは複数行にわたっている。1行が一つの項目になり,それぞれの項目が意味を持っている。つまり,HTTPリクエストの見かけは,個条書きにしたテキスト・ファイルのようなものと考えればよい。

 このHTTPリクエストを分解してみると,三つの部分に分けられる。リクエスト行,メッセージ・ヘッダー,エンティティ・ボディである(図1-3[拡大表示])。

 もっとも重要なのは,先頭の1行目に書かれるリクエスト行である。この1行で,Webサーバーにどんな処理をしてほしいかを伝えている。Webシステムが発案された初期のころは,このリクエスト行だけをWebサーバーに送っていたくらいだ*。つまり,リクエスト行の内容さえ理解できれば,HTTPリクエストの大まかな内容がわかる。

 メッセージ・ヘッダーは,リクエスト行の次に続くテキスト列で,通常は複数行ある*。ここには,Webブラウザの種類やバージョン,対応するデータ形式などの付加的な情報が書かれる。

 そして,区切りのための空白行のあと,エンティティ・ボディが続く。ここは,WebブラウザからWebサーバーにファイルなどの比較的大きなデータを送るときに用いる部分である。送るデータがないときは使われない。

1行目で大筋がわかる

 リクエスト行はとりわけ重要なので,もう少し詳しく見ておこう。

 リクエスト行は,次のような形式になっている。

GET /index.html HTTP/1.1

 この先頭にあるGET(ゲット)という部分はメソッドと呼ばれ,Webサーバーに実行してほしい処理を示すコマンドである。図1-3に示すように,メソッドにはいくつかの種類があるが,よく使うのはGETとPOST(ポスト)である。Webブラウザが単純にWebページのデータをサーバーに要求するときはGET,Webブラウザ側から大きなデータを送信するときにはPOSTを使う。

 次に続く「/index.html」の部分はURI*と呼ばれる。名前がURLと似ているように,これらには深い関係がある。URLからスキームやドメイン名などを取り除いもの,すなわちパス名の部分がURIと考えればよい*

 リクエスト行の最後にある「HTTP

/1.1」は,WebブラウザがサポートしているHTTPのバージョンを表す。

 つまり,このリクエスト行で「/index.htmlを送ってください。私はHTTP/1.1をサポートしています」と,Webサーバーに伝えているのである。

データとともに処理結果も通知

 Webサーバーは,Webブラウザから要求されると,HTMLデータなどを返信する。この返信するデータは,HTTPレスポンスと呼ばれ,HTTPリクエストの構造とほぼ同じになる。つまり,人が読めるテキスト・データになっていて,大きく三つの部分に分かれている。それぞれステータス行,メッセージ・ヘッダー,エンティティ・ボディと呼ばれている(図1-4[拡大表示])。

 このHTTPレスポンスで重要なのは,やはり1行目にくるステータス行である。ステータス行は,

HTTP/1.1 200 OK
ような形式になる。最初の「HTTP /1.1」の部分は,WebサーバーがサポートするHTTPのバージョンを表している。次に続く「200」の部分は,ステータス・コードと呼ばれ,ブラウザからのリクエストをどう処理したかという結果を番号で表す。最後の「OK」の部分は,ステータス・コードの補足説明である。

 WebサーバーがWebブラウザからのHTTPリクエストをうまく処理して,適切なデータを返信する場合は,この例のように「200 OK」になる。

 ステータス行に続くメッセージ・ヘッダーは,Webサーバーがより詳細な情報をWebブラウザに伝えるために利用される。例えば,返信データの形式や大きさ,データの有効期限,あるいはWebブラウザへの動作の指示などが記述される。

 そして,区切りのための空白行のあと,エンティティ・ボディが続く。ここにWebブラウザに返信するWebページのデータが入る。

URLは実際のディレクトリではない

 話が前後するが,Webサーバー側の処理も確認しておこう。

 Webサーバーの実体は,サーバー・マシン上で動いているソフトウエアである。Apache(アパッチ)やIIS*などが有名だが,WebブラウザからのHTTPリクエストを解釈して適切に処理し,HTTPレスポンスを返す点はどれも同じである。

 Webサーバー・ソフトは,WebブラウザからHTTPリクエストを受け取ると,その内容を解析する。まずメソッドを調べ,Webブラウザの要求内容を確認する。そして,リクエスト中のURIを分析し,要求しているデータのありかを調べる。

 ただURIであるパス名は,Webサーバー上のデータのありかを直接指しているとは限らない。多くのWebサーバーは外部に仮想的なディレクトリを見せ,それにアクセスさせている。

 そのためにWebサーバー・ソフトは,外部に公開する仮想ディレクトリとサーバー・マシンの実際のディレクトリとの対応関係を把握している。その対応関係から,WebサーバーはリクエストのURIに相当する実際のデータのありかを見つけ出す。そして目的のデータが入っているファイルを読み出し(図1-5[拡大表示]),そのデータをWebブラウザに返信する。

やりとりを繰り返してページを作る

 ここまでのやりとりで,WebブラウザはWebサーバーからデータを受け取ることができる。

 しかし,1回だけのやりとりでWebページが出来上がることはまずない。最初のやりとりで送られてくるのはHTMLデータだけ*だからである。最近のWebページのほとんどは,画像などが貼り込まれている。こうした画像を得るには,再びWebサーバーからデータをもらう必要がある。

 つまり,実際のWebページを表示するまでには,HTTPリクエストを出してレスポンスを受け取るやりとりが,何回も繰り返される(図1-6[拡大表示])。

 Webブラウザは,まずHTMLデータを要求し,それに応じてWebサーバーがHTMLデータを返す。そして,Webブラウザは,HTMLデータを上から順に解析して,文字などをHTMLで指示された大きさで表示していく。

 その途中に<IMG(イメージ)>と書かれたタグ*を見つけると,Webサーバーに改めて画像データを要求する。<IMG>タグは,「そこに画像を貼り込んで表示せよ」というHTMLの命令で,画像データのありかを示すURLも書かれている。

 しかも,こうした画像データはHTMLデータを持っていたサーバーにある必要はない。<IMG>タグに書かれたURLには,ブラウザのアドレス欄に表示されるURLと同様に,ホスト名なども記載されるので,異なるサーバーにあってもよいのである。

◆       ◆       ◆

 ここまでくれば,Webアクセスの基本は一通り掌握できたと言える。これらの知識をベースに,Part2でWebアクセスの実際に迫っていこう。



図A●Telnetを使ってWebサーバーとやりとりしてみる
この画面は編集部で用意したテスト・ページを使って試したものである。[画像のクリックで拡大表示]

TelnetでHTTPを再現

 Part1で得た知識のおさらいの意味を込めて,Telnetテルネットを使ってWebアクセスを再現してみよう。今回はWindows 2000に標準で付属しているコマンドを使ってみた。まずコマンド・プロンプト*を立ち上げ,「telnet」と入力する。

 すると,プロンプト*が「Microsoft Telnet>」になる。これで,無事にTelnetが立ち上がり,Telnetコマンドを入力する準備ができた。次に,

set LOCAL_ECHO

入力する*。さらに,

open www.example.com 80

などと打ち込もう。「open」の次は,アクセスしたいWebサーバーのドメイン名を入れる。これでWebサーバーにつながる。ちなみに,最後の「80」はWebサーバーが待ち受けているポート番号である。

 ここまで実行すると,画面が真っ黒になってしまうが,あわてることはない。Webサーバーとはきちんとつながっており,サーバーはユーザーからのリクエスト・メッセージを待ち受けている。そこで,HTTPリクエストのリクエスト行を

GET /index.html HTTP/1.0

と打ち込む。ここで注意すべきなのは,打ち込んだあとにリターン・キーを2回押すこと*。すると,WebサーバーからHTMLデータが返信されてくる(図A[拡大表示])。