WWW システムの全体の構成は 図-2 のようになる. URL はインターネット上のさまざまな資源を統一的に表記するための記法で ある. HTTP は WWW のクライアントとサーバがやり取りするためのプロトコル である. HTML はハイパーテキストを表現するための言語である.
WWW クライアントは URL によって指定された情報を, HTTP を用いて, HTML 文書を取得して, 画面に表示する. その画面上でさらにユーザがリンクを選択すると, そのユーザのアクションは URL という形で WWW クライアントに伝わり, 続くサーバとの対話を引き起こす.
ユーザによって選択された URL が指す情報が他のサービスの テキスト系のデータであった場合には, それらのサーバが 使う通信プロトコル (FTP サーバなら FTP) を使って その情報を取得する. 情報はそのサービス固有の形式を持っているが, HTML に変換され (10), 画面に表示される.
URL が指す情報が画像や音声などのバイナリデータの場合には, そのデータを表示できる外部ビューアに渡して起動する. この仕組みによってユーザがリンクを選択すると動画や音楽が 始まったりするのである.
一部のサービスはゲートウェイによって実現されている. 実際の情報は別のサーバに格納されており, 問い合わせと応答がゲートウェイで中継されるという仕組みであり, CGI で実現されていることが多い. クライアント側からは HTTP でアクセスできるため, ユーザには WWW に統合されたサービスのように見える.
scheme://host.domain/[:port]/path[?key]この scheme 部には http, gopher, ftp, wais, nntp, telnet, file, などの 様々なプロトコルを指定することができる. 具体的なURLの記述例を次に挙げるので参考にされたい.
リクエストは例えば次のような形をしている.
GET /index.html HTTP/1.0最初の GET がメソッドと呼ばれるもので, 対象となる情報に対して行われる処理を示す. 他のメソッドは HEAD, PUT, POST, DELETE などがあるが, 実装の度合はサーバにより異なるのが現状である. 2 番目の ``/index.html'' がクライアントがそのサーバに求める 情報を指す URL である (11). 最後の ``HTTP/1.0'' は使用する HTTP のバージョンを示す. リクエストには, この後に RFC822 および RFC1521 (MIME) のフォーマットに 従ったリクエストヘッダがついたり, POST メソッドを使う時にはデータが付属する.
サーバがクライアントに返すレスポンスは, 例えば次のような形をしている.
HTTP/1.0 200 Document follows MIME-Version: 1.0 Server: CERN/3.0 Date: Friday, 24-Feb-95 11:25:26 GMT Content-Type: text/html Content-Length: 1808 <HTML> ... (中略) ... </HTML>最初の一行がステータスラインと呼ばれるものでリクエストを 解釈した結果をクライアントに知らせている. 上の例では リクエストが成功したので, この行の後にリクエストされた情報が 返送されることを示している. その後ろには返送される情報に関する MIME ヘッダが付けられており, さらにその後ろには空行に続けて実際のデータ (この場合は HTML 文書) が転送される.
<HTML> <HEAD> <TITLE>A simple example</TITLE> </HEAD> <BODY> <H1>A simple example</H1> Welcome to <EM>WWW</EM> world. <P> <UL> <LI> <A HREF="http://www.fujitsu.co.jp/"> FUJITSU LIMITED. Home Page</A> <LI> <A HREF="http://www.ntt.jp/"> NTT Home Page</A> </UL> </BODY> </HTML>これを WWW クライアントで 表示させると, タグの情報をもとにフォーマットされた 文書として見ることができる. 各クライアントにより差異があるが, Infomosaic では 図-3 のように表示される. タグに用いられるアルファベットは大小文字の 区別が無視される. ここではもっとも重要なタグ <A>, アンカー (Anchor) について説明する. このアンカータグは, そのタグで示された 文字列 (あるいは画像) をアンカーとするものであるが, その ``HREF'' 属性に URL を指定することにより, そのアンカーを ``リンク'' とすることができる. このアンカータグによってはじめて HTML 文書はハイパーテキスト たり得る.
HTTP で WWW サーバに
GET /cgi-bin/command/path HTTP/1.0とリクエストを渡すと WWW サーバでは, 環境変数 ``PATH¥_INFO'' に ``/path'' が設定されて, ``command'' が実行される (13). その command を実行して標準出力に出てきた結果を アクセスしてきた WWW クライアントにデータとして返す. このコマンドと WWW サーバの間のやりとりを決めた ものが CGI である.
この CGI により WWW サーバに アクセスしてきた WWW のクライアントに対して, ``path'' に対応する実在のファイルとは関係なく, ``path'' を WWW サーバ側で解釈して, その解釈した結果で動的に HTML 文書 を生成してクライアント側に返すことができる. このことを本稿では WWW の動的な側面と呼んでいる. WWW ではこういったことが容易にでき (14), それが WWW を面白くし, 可能性を開いた 大きな理由の一つだと考えている.
これは以下のような仕組みになっている. クライアントは Image Map の URL の後ろに ``?'' とマウスでクリックされた位置の座標を付加して, 次のようなリクエストを送信する
GET /cgi-bin/imagemap/www-in-JP?307,59 HTTP/1.0サーバでは CGI コマンドである imagemap が起動され, その座標を解析し, ページが別の場所に移ったことを 示す Location フィールドをヘッダに含んだメッセージを クライアントに返信する. クライアントはヘッダの Location フィールドを見て, 北海道大学のホームページにアクセスする.
このようなゲームでは, 複数のクライアントが同時にアクセスする可能性があるため, アクセスする個人毎のアクセスのシーケンスを管理する必要がある. その管理の方法は, サーバが返す HTML 文書中に それぞれの状態に対応する数を入れておくものである. この場合は Image Map である絵をクリックしたら, その数がサーバに ``path'' の一部として返ってくるようにした.
具体的にはリンクになっている絵の部分は 例えば次のようになっている. (以下の例で www は仮のホスト名である.)
<A HREF="http://www/cgi-bin/puzzle/14035"> <IMG SRC="http://www/cgi-bin/puzzle_gif?14035" ISMAP> </A>ユーザが絵をマウスでクリックすると そのクライアントは www に対して, マウスがクリックされた座標を 付加して以下のようなリクエストを送る.
GET /cgi-bin/puzzle/14035?231,80 HTTP/1.0サーバ側では ``14035'' に対応する状態で座標 (231, 80) でクリックが あったということで次の状態のページを作り, クライアントに返す. もちろん次のページも状態に 対応する番号が前のページと同じように URL の中に入っている.
WWW の初期には, クライアントからサーバへ情報を送るためには, GET メソッドを使って, URL の中にその情報をエンコーディングして サーバに送っていた. この手法は検索のキーワード程度を送るには充分であったが, やがて FORM (16) が出てきて文書まで送るようになると URL 自体がとてつもなく長くなり, 実用上不便であった. このような背景があり, POST メソッドが使われるようになった. この POST メソッドは, 通常 CGI コマンドと組み合わせて使われる.
以下に FORM と POST メソッドを使った WWW と FAX の ゲートウェイの例を説明する. FORM を使うと例えば, 図-6 のような FAX の送信紙のようなページができる. このそれぞれのフィールドに適当に入力をして, ``Send'' のボタンをクリックすると, WWW クライアント は HTTP で WWW サーバに
POST /cgi-bin/fax-www-postといった行から始まるリクエストを送る. リクエストヘッダの 後にそれぞれのフィールドの情報をデータとして WWW サーバに渡す.
WWW サーバによって実行される CGI コマンドである fax-www-post は, WWW クライアントから送られた データを標準入力から以下のような形で受けとる (17).
subject=Test+Fax+Message &r-name=Keisuke+Kibakura &r-affiliation=Fujitsu+Ltd. &r-fax=044-XXX-XXXX &s-name=Ryusuke+Masuoka ...CGI コマンドである fax-www-post はこの入力から 必要な情報を抽出して, FAX プログラムを使って FAX を 送信する.