前の項目 上の項目 後の項目

技術

WWW の枠組

WWW の枠組は中心的な概念として URL, HTTP, HTML, CGI などによって形作られている (9). WWW はこれらの強力な枠組によって インターネット上における情報の共有を可能にした. 以下では WWW の枠組の全体を概観した後, 個々の要素を説明する. CGI については特に WWW の動的な側面として章を分けて解説する.

WWW システムの全体の構成は 図-2 のようになる. URL はインターネット上のさまざまな資源を統一的に表記するための記法で ある. HTTP は WWW のクライアントとサーバがやり取りするためのプロトコル である. HTML はハイパーテキストを表現するための言語である.

WWW クライアントは URL によって指定された情報を, HTTP を用いて, HTML 文書を取得して, 画面に表示する. その画面上でさらにユーザがリンクを選択すると, そのユーザのアクションは URL という形で WWW クライアントに伝わり, 続くサーバとの対話を引き起こす.

ユーザによって選択された URL が指す情報が他のサービスの テキスト系のデータであった場合には, それらのサーバが 使う通信プロトコル (FTP サーバなら FTP) を使って その情報を取得する. 情報はそのサービス固有の形式を持っているが, HTML に変換され (10), 画面に表示される.

URL が指す情報が画像や音声などのバイナリデータの場合には, そのデータを表示できる外部ビューアに渡して起動する. この仕組みによってユーザがリンクを選択すると動画や音楽が 始まったりするのである.

一部のサービスはゲートウェイによって実現されている. 実際の情報は別のサーバに格納されており, 問い合わせと応答がゲートウェイで中継されるという仕組みであり, CGI で実現されていることが多い. クライアント側からは HTTP でアクセスできるため, ユーザには WWW に統合されたサービスのように見える.

URL (Uniform Resource Locator)

URL とはインターネット上の 様々なリソースを統一的に記述するための記法である. URL はリソースを特定するために, ホスト名, ファイル名, アクセスに用いるプロトコル, アクセス時のコマンドなど の要素を取り込んだ名前空間を作ろうというものであり, 以下のような形式を持っている.
scheme://host.domain/[:port]/path[?key]
この scheme 部には http, gopher, ftp, wais, nntp, telnet, file, などの 様々なプロトコルを指定することができる. 具体的なURLの記述例を次に挙げるので参考にされたい.
  • WWWサーバ www.ncsa.uiuc.edu上の ホームページ index.html を示す URL: http://www.ncsa.uiuc.edu/index.html
  • FTP サーバ ftp.iij.ad.jp 上のファイル /pub/ls-lR.Z を示す URL: ftp://ftp.iij.ad.jp/pub/ls-lR.Z
  • HTTP (HyperText Transfer Protocol)

    WWW ではクライアントとサーバが通信するためのプロトコルを HTTP として規定している. ハイパーテキストは主にこのプロトコルにしたがってやりとりされる. 基本的には, クライアントがサーバへリクエストを送信し, それに対して サーバがクライアントへレスポンスを返信するという形式になっている.

    リクエストは例えば次のような形をしている.

    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 (HyperText Markup Language)

    WWW で用いられるハイパーテキストを記述するための 言語が HTML である. HTML は SGML (12) の DTD (Document Type Definition) によって定義された 言語であり, 文章の要素を表すのに SGML の記法に従ったタグを用いる. すなわち <element-name> ... <element-name> のような表現形式である. 以下に 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 文書はハイパーテキスト たり得る.

    CGI: WWW の動的な側面

    この章では, WWW の動的な側面としての CGI (Common Gateway Interface) を具体的な例を使って 紹介していく.

    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 Redirection

    図-4 は NTT の WWW サーバにある ``Clickable W3 Map for Japan'' のページ (URL は http://www.ntt.jp/japan/map) である. この日本地図が Image Map になっていて, クリックする 位置によって表示されるページが異なる. 例えば, ユーザが北海道大学の文字 (``Hokkaido Univ.'') の部分を クリックすると, WWW クライアントは北海道大学のホームページを表示する (15).

    これは以下のような仕組みになっている. クライアントは Image Map の URL の後ろに ``?'' とマウスでクリックされた位置の座標を付加して, 次のようなリクエストを送信する

    GET /cgi-bin/imagemap/www-in-JP?307,59 HTTP/1.0
    
    サーバでは CGI コマンドである imagemap が起動され, その座標を解析し, ページが別の場所に移ったことを 示す Location フィールドをヘッダに含んだメッセージを クライアントに返信する. クライアントはヘッダの Location フィールドを見て, 北海道大学のホームページにアクセスする.

    シーケンスの管理 (15 Puzzle)

    CGI と Image Map を使うと 15 Puzzle と言われるものが 作成できる. 図-5 のようなページで, 最終的に絵全体を復元することが目的であり, 空いているグレーの枠に接しているいずれかの 枠内をクリックすると, 次はクリックした枠が空いている枠に移動した ページが表示される.

    このようなゲームでは, 複数のクライアントが同時にアクセスする可能性があるため, アクセスする個人毎のアクセスのシーケンスを管理する必要がある. その管理の方法は, サーバが返す 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 の中に入っている.

    POST メソッド

    WWW を情報をブラウズするだけの受動的なメディアから, より能動的なメディアにするには, クライアント側からも サーバに情報を送れることが本質的に必要である.

    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 を 送信する.

    前の項目 上の項目 後の項目