- 外部ソフトウェアへの情報入力機構
- 現在時刻をHTMLの形式で返したり,デジタルカメラで撮影した現在の画像をJPEG形式でHTTPクライアントに返すことで,時計のページやWebカメラのページを作ることができます.
ソフトウェアには,通常,情報の入力と情報の出力があります.これらの例は入力はオペレーティングシステムの内部時計であったり,サーバコンピュータに接続されたデジタルカメラであり,出力がHTTPクライアントに渡されるHTMLやJPEG画像でした.
では,HTTPクライアントから情報を入力するにはどのようにしたらよいのでしょうか.
HTTPでは,GETコマンドで指定するURLの一部分にこの情報を含ませることができます.図5に,足し算をする動的なページの例を示します.
〔図5〕足し算を行う動的ページの例

- Webブラウザの入力ボックスに,ユーザーが数字を入力して,足すボタンをクリックします.
- HTTPクライアントからHTTPサーバに対して,GETコマンドが送られます.このとき,URLのパス名の後に‘?’をはさんで,ユーザーが入力した数字が送られます.
- HTTPサーバは,要求が動的なページに対するものであると判断すると,外部ソフトウェアを呼び出します.このとき,外部ソフトウェアにはURLがそのまま送られます.
- 外部ソフトウェアは,URLに含まれた文字列からユーザーが入力した数字を切り出して,足し算を行います.
- 足し算の結果をHTML形式に変換し,HTTPヘッダを付けてHTTPサーバに返します.
- HTTPサーバは,外部ソフトウェアから送られてきた情報をそのままHTTPクライアントに送り返します.
このようにして,ユーザーにはWebブラウザを経由して,足し算の結果が表示されます.実はこれがCGIのしくみです.
CGIは,Common Gateway Interfaceの略で,日本語に直すと共通入出力接続点となります.何が共通なのかというと,HTTPサーバと外部ソフトウェアのつなぎかたが共通だ,ということです.CGI対応とうたっているHTTPサーバはすべてこのようなしくみを持っています.
正確にいえば,CGIは「インターフェースの取り決め」であって,ソフトウェアではありません.ちょうど,イーサネットカードを指さして,「インターネット」と言っているようなものです.一般には,Web掲示板を実現するソフトウェアや,お買物ページを実現するソフトウェアを「CGI」と呼ぶことが多いですが,これは正しくありません.「掲示板ソフトウェアとHTTPサーバをつなぐしくみ」がCGIです.一般に言われているCGIという言葉の意味は,正確にはCGIスクリプト,つまり「HTTPサーバのCGI機能を利用するソフトウェア」ということになります.
〔図6〕HTTPサーバと外部ソフトウェアをつなぐCGI
|
CGIの利点は,図6のようにCGI機能を持っているHTTPサーバであれば,どのようなサーバであっても利用できることです.逆にCGIの取り決めに従っているソフトウェアであれば,HTTPサーバから利用できることです.
インターネットは,オープンなしくみによって構成されています.HTTPサーバと動的なページを生成する外部ソフトウェアのつながりかたも,CGIというどのHTTPサーバにも共通のオープンなしくみによって実現されているのです.
- 動的なページを生成するプログラミング言語
- このように,CGIに対応できれば,HTTPサーバからの動的なページの要求に答えて,ページを作成し,HTTPクライアントに返すことができます.ですから外部ソフトウェアの作成にあたっては,CGIの取り決めをして従ってさえいれば,どのような言語で作成してもよいことになります.
一般的には,Perlというスクリプト言語が用いられます.Perlは,もともとテキストファイルを操作するために設計された言語です.HTMLもテキストファイルですから,HTMLファイルを動的に生成するために,Perlはちょうどよい言語であったため,現在はPerlが主流となっています.もちろん,C言語でもC++やJavaでもCGI機能を利用することは可能です.
しかしながら,CやC++の場合,外部ソフトウェアを動かすオペレーティングシステムにあった実行形式のファイルを準備する必要があります.Javaの場合にも,Java仮想マシンがインストールされている必要があります.一般的なインターネットプロバイダのサービスとしては,Java仮想マシンが準備されておらず使用できません.
|