CGIとは -データ送信と環境変数-

[INDEX] [BACK] [NEXT]

  ブラウザからWebサーバーにデータを送信する方法には「GET」と「POST」の2通りあります。CGIプログラムは、POSTで送信されたデータは標準入力から取り出し、GETで送信されたデータは「QUERY_STRING」というCGI環境変数から取り出します。

 ブラウザへの情報の返信(httpレスポンス)方法としては、一般的にウェブサーバーによって起動されたCGIプログラムが標準出力へ情報を出力するとウェブサーバーがそのデータをhttpセッション毎にブラウザに送ります。

 POSTの場合サーバーに送られてくるデータのバイト数がCGI環境変数CONTENT_LENGTH」に格納されます。よってPOSTの場合この変数の値分のデータを標準入力から読み込みます。htmlのformタグを使用して送信データを定義しhtmlのformボタンなどを使って送信します。GETの場合は、CGIプログラム名の後に「?」を付けてその後に文字列(クエリー文字列)を付けて起動すると、この文字列データはGETとして送信されます。

 一般的に大量データを送信する場合はPOST、小量のデータしか送信しない場合はGETという使い分けをします。多くは「?」に続くクエリー文字列をCGIプログラムの動作モードを決定するデータとして利用する場合が多いようです。なお、データのうち「&,=,%,+,日本語文字」は%とそれに続く16進数2桁にエンコードされて送信されてきますので、CGIプログラムはこれをデコードしてから使う必要が有ります。Perlであれば送信されてきたデータのデコード処理をパッキングしたPerl用のフリーモジュールを使ったり、CGI用の便利な専用モジュールを手軽に利用できます。PerlであればURI::EscapeCGI.pmという有名なモジュールを使えば、GETやPOSTで送られてきた情報を効率よく簡単に取り出すことができます。

 CGI環境変数にはこの他にも、クライアントのブラウザ名がセットされているもの、クライアントのIPアドレスがセットされているもの、クライアントのホスト名がセットされているもの、要求方法(GETかPOSTか)を示すもの、等々いろいろありますがここでは説明を省きます。又この環境変数はサーバーソフトとOSに依存するので完全に標準セットが有るわけではありませんが、どんなサーバーソフトでもまず利用できる環境変数リストは、以下を参照してください。ここではRFCで規格として制定されている変数が載っています。
CGI Environment Variables from NCSA

※ここからは現在では利用されない古い情報です。

 以上はCGIにおけるブラウザとサーバー間のデータ受け渡しの一般的な概要ですが、ここでWindowsのWebサーバー上で動かすためのVBを使ったCGIプログラムの書き方について少し触れます。WindowsのWebサーバーIIS/PWSでもブラウザからのデータは環境変数にセットします。ちなみにNT4.0WorkstationについてくるPeerWebServerの環境変数リストはこちらです。これらを使ってCGIプログラムを作成できるわけです。VBでは「environ」関数を使ってこの環境変数を読めます。但し「QUERY_STRING」は「COMMAND」関数を使って取り出します。又ブラウザに表示させる文字列は標準入出力関連のAPI関数を使います。私はこの辺の処理をまとめたフリーのコードモジュールを以下から入手して利用しています。
KOU-GEN-SHA Software labs」←リンク切れていました。

[INDEX] [BACK] [NEXT]

更新日: