CGI (Common Gateway Interface) について †制約を多くつけた非常に簡単な web server 機能であれば実装することも、それほど難しいわけではない。しかしながら、ユーザの要望に伴いインターフェースの変更が想定されるのであれば、まともな web server program を使うのが賢明だろう。多くの Web server には server 上の他の program を呼び出して、その出力結果を client に返す機能がある。この連携のための interface が server ごとに異なると、server を入れ替える度に連携相手の program も書き換えなければいけなくなるので不便である。そこで、server によらず、一般的なやり方が規格化されている。これが CGI (Common Gateway Interface) と呼ばれるものである。 動作概略 †Client からは、server 上の別の program の出力であるかどうかはわからない。あくまでも client から送られる要求メッセージは通常の要求メッセージである。Server は受け取ったメッセージの path を解析して、server により決められている特定のルール(例えば /cgi-bin フォルダ中のファイルへのアクセスであるとか)に合致すれば、外部 program の起動が必要であると判断し、その結果を受け取って client に戻す。 ここで問題になるのが、web server が受け取った要求メッセージを、どのような形で外部プログラムへ渡すのかということと、外部プログラムの出力をどのように client へ戻すのかということである。CGI はそれを定めた規格である。 要求メッセージの引渡し †一般的には OS に依存するが、基本的に次の3つ(単独または組み合わせ)が用いられる
特に GET method で form を送る際などに用いられる URI の query 部は、単独で環境変数に設定される。POST method など、要求にメッセージ本体を伴うものは、本体部は標準入力から渡される。この時、環境変数 CONTENT-LENGTH が設定され、これが示す数が本体部の octet 数である。 応答メッセージ †応答メッセージの引渡しも OS に依存するが、基本的には標準出力を用いる。通常の http server と同様、応答ヘッダ部に続いて応答本文が続く形である。ヘッダ部と本文は空行(<CR><LF><CR><LF>)で区切られる。 |