CGIとは何か

CGIはWebサーバーと連携して動くソフトウエアの約束事です。

説明

CGI(Common Gateway Interface) とは、Web サーバーと他のプログラムとのデータの送受信の規格です。簡単に言えば、CGI とは Web サーバにおいて、クライアント(ブラウザ)の要求に応じてプログラムを起動し、その結果をクライアントへ返すための仕組みです。

このことから、Web サーバーと連動して (Web サーバーから) 呼び出されるプログラムのことを CGI(CGI プログラム) と言うこともあります。
Web サーバーは HTML 文書をそのままクライアントに送信します。クライアントから見れば、いつでも誰でも同じ内容の HTML 文書を受け取ることができます。このようなウェブサイトは、いつでも変わることがないので、「静的」なページということができます。これに対し、ウェブサイトを利用した掲示板は書き込みがあるごとに内容が変わります。このような、HTML 文書だけでは記述できないような「動的」なページを作成することができるしくみを提供するのが CGI です。CGI は、クライアントが送信したデータを、サーバー内部で処理して結果をクライアントに返します。掲示板、アクセスカウンタ、ショッピングカート、グループウエアなどが、この CGIを使って実現されています。
CGI プログラムは、どんな言語でも作ることができます。CGI プログラムは、クライアント(ブラウザ)から文字データを送ってもらい、それを加工して、HTML の文法に従ったテキストを返します。これは、GUI などユーザーインターフェースは不要、文字列処理中心ということで、文字列処理に強い Perl という言語が多く用いられてきました。最近では、PHP や ASP といった言語もしばしば利用されます。

CGIプログラムの動作

クライアントとCGIプログラムとは次のようにデータを送受信します。

  1. クライアントからフォームなどのデータをURLエンコードしてまとめて送信
  2. Web サーバーはクライアントから送られてきたデータを、POST メソッドの場合は標準入力にその他の場合は環境変数にセット、クッキーが送られてきていれば環境変数にセットして CGI プログラムを起動
  3. CGIプログラムは、標準入力や環境変数から送られてきたデータを取得
  4. 取得したデータをURLデコードして、さらにアイテムごとに分離
  5. CGIプログラムの処理を実行
  6. CGIプログラムは処理結果を標準出力へ出力
  7. WebサーバーはCGIプログラムから送られてきた結果をそのままクライアントに送信
このように CGI プログラムは、標準入力 (環境変数) からデータをもらい標準出力に結果を返すという UNIX によくあるフィルタプログラムです。CGI プログラムはネットワークや通信のことを考える必要はありません。しかし、Web サーバは結果をそのままクライアントに返すため、CGI がデータを出力するときは、HTTP 応答ヘッダと HTML に従った本体(エンティティー)を出力する必要があります。HTTP 応答ヘッダは、テキストデータか画像データかなど送るデータが何物であるかや、クッキーの情報などです。本体は HTML に従った文書データでクライアントが解釈して画面を作ります。例えば、次のようになります。
Content-Type: text/html
LF
<HTML>
<HEAD>
<TITLE>sample pages...</TITLE>
</HEAD>
<BODY>
....
</BODY>
</HTML>
LF は改行コードです。LF と明示してありませんが、各行の終わりには改行 (LF) があります。HTTP 応答ヘッダと本体は改行で区切られます