目次索引著者紹介

第4章

 自ら情報を発信する方法――2の2

サーバでの発信with Macintosh
―CGI

牧原真治

 CGI(Common Gateway Interface)とは何か.どんなところに利用されるのか.その原理は?ということを実際のCGIを例にあげて説明する.

1.普通のHTMLドキュメント

 普通のHTMLドキュメントをWWWサーバはどう取り扱っているのだろうか.図1を見てほしい.

 図1 普通のHTMLを送る

 WWWブラウザからURLをサーバに送ると,WWWサーバはURLからファイルの拡張子を認識し,「.html」となっていればそれがHTMLファイルと認識して,ヘッダとして情報を付け加えてブラウザに返す.これが普通のHTMLドキュメントを返す手順である.  CGIはクライアントからの情報をWebサーバを経由して伝達され,それをCGIで処理しWWWサーバを経由してWWWブラウザに返す(図2).

 図2 CGIでドキュメントを返す場合

 この間WWWサーバは中継をするだけで,伝達される情報には手を触れない.従って,ヘッダもCGIで面倒を見てやらなければならない.CGIは必ずしもドキュメントを返す必要はなく,URLを返しそこにアクセスするよう仕向けることができる.これをリダイレクトと呼ぶ(図3).

 図3 CGIでリダイレクトする場合

この場合,ドキュメントを返す場合とヘッダが異なる.リダイレクトの代表的なものがクリッカブルマップである.クリッカブルマップをクリックすると,クライアト側からは,

のようなURLがサーバに送られCGIは,マップファイルに書かれている座標情報をもとにしてURLを返す(図4).ブラウザの一番下の欄にURLが表示されているのに注意.ここでは,CGIプログラムの名前を「MapServe.acgi」としている.その動作は,次のような模式図で表される(図5).クリッカブルマップでは,「.map」ファイルを書き換えることで,1つのCGIプログラムで複数のクリッカブルマップを管理することができる.

 図4 クリッカブルマップの例 ブラウザの一番下に示されるURLに注目.

 図5 クリッカブルマップの構造

 次に,データベースとの結合であるが,ここではMyButlerというMacOSで動くデータベースサーバとWebSTARとをとり持つTango.acgiを例にあげるが,クライアントはクエリードキュメントをTango.acgiを通じて読み,フォームに書き込みをしてその内容を送る.Tango.acgiは,クライアントからの情報とクエリードキュメントの内容から判断してMyButlerにアクセスし検索結果をユーザに返す(図6).

 図6 WWWサーバとデータベースをCGIにより結合させた例

 このクエリードキュメントは,TangoEditorで編集するが,編集する時に自動的にデータベースの構造を取り込み,データのどの項目について検索するのか,検索結果としてどんなものを表示するかをグラフィックユーザインターフェースで設定できる.
 次に,使用頻度の高いCGIの1つであるクリッカブルマップの処理について紹介する.

2.クリッカブルマップ

 インライン表示されている画像の上をクリックすることで,その画像の座標に応じてリンク先が設定してあるものをクリッカブルマップと呼ぶ.クリッカブルマップは,CGIで実現するため,CGIアプリケーションが必要であるが,一部のサーバではこれが組み込まれているものもある.Macintosh上で動くサーバでは,InterServer Publisherはこうしたサーバの1つであるが,その他のサーバはCGIアプリケーションが必要になる.クリッカブルマップのためのCGIとしては,MapServe, Imagemap, MacImagemapなどがあるが,MapServeが一番軽快に動くため,これを利用することを勧める.そのほかに必要なものは,座標とリンク先の関係を書いたマップファイルであるが,これもWebMapをはじめとするマップエディタで編集することが可能である.また,Netscape Navigaterでは,クライアントサイドクリッカブルマップが組み込まれ,CGI不要のしくみも組み込まれている.
[クリッカブルマップ作成手順]
 1)WebMap<
http://www.city.net/cnx/software/webmap.html>で,マップを作成する.
 2)MapServe<http://www.spub.ksu.edu/other/machttp_tools/mapserve/mapserve.html>の設定をする.
 3)HTMLファイルを設定する(WebSTARでアクションを設定したり,InterServer Publisherを使用する場合には,HTMLファイルの記述方法が簡単になる).
という手順になる.

続く