Common Gateway Interface

Common Gateway Interfaceの最新ニュースをまとめて検索!

Common Gateway Interface (コモン・ゲートウェイ・インタフェース、CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。

ウェブサーバプログラムの機能の主体は、あらかじめ用意された情報を利用者(クライアント)の要求に応じて送り返すことである。そのためサーバプログラム単体では情報をその場で動的に生成してクライアントに送信するような仕組みを作ることはできなかった。 そこでサーバプログラムから他のプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案された。それを実現するためのサーバプログラムと外部プログラムとの連携法の取り決めがCGIである。

CGIは環境変数や標準入出力の扱えるプログラミング言語からなら言語の別を問わず幅広く利用できるが、実行速度やテキスト処理の容易さなどの兼ね合いによりPerlが使われることが多かった。近年では、Perlに加えてPythonRubyなども広く使われている。

代表的なアプリケーションには、電子掲示板アクセスカウンタWikiBlogシステムなどがある。

近年では、Webサーバのプロセスとしてインタプリタを常駐させておくことにより、CGIからプログラムを呼び出すオーバヘッドを減らし、パフォーマンスを向上させたJava Servletやmod perl、mod php、FastCGIなどの実装も出現している。

目次

[編集] CGIに関するよくある誤解

名前からも分かるとおり、CGIはあくまでもインターフェイスであり、特定のプラットフォームに依存せずに、ウェブサーバなどから外部プログラムを呼び出す仕組みのことを指す。

そのため、この仕組みを用いて起動されるプログラム本体のことをCGIと呼称するのは誤りである。また、1990年代後半のCGIを使ったプログラムはPerlが大部分であったため、「CGIとはPerlまたはそれに類する特定の言語のことである」という認識も広く存在する[要出典]が、こちらも誤りである。

[編集] 仕様

CGIの仕様はNCSAにより最初に定義・実装(NCSA HTTPdにおいて)され、現在の最新版はCGI1.1である[1]。2004年にRFC 3875となった[2]

CGIは、典型的には以下のような動作を期待される。CGIを経由して実行されるプログラムのことを、CGIプログラムと呼ぶ。

  • CGIプログラムはウェブサーバがクライアントからのリクエストに応じて起動する。
    典型的には、ウェブサーバの公開領域に置かれたプログラムに対応するURIへのリクエストがあると、サーバはそのプログラムをCGIの取り決めに従って呼び出す。
  • CGIプログラムへの情報の入力は、コマンドライン引数環境変数標準入力によって行われる。
    • ウェブサーバがプログラムを呼び出す時点でいくつかの環境変数を定義することが定められている。
    • 特に、クライアントがサーバに要求したURIのうち、検索文字列(Query String)部が環境変数 QUERY_STRING に設定されるので、これはHTMLフォームからGETメソッドで入力を受けるのに便利である。
    • QUERY_STRINGに文字'='が含まれない場合は、サーバはQUERY_STRINGの内容をコマンドライン引数としてCGIプログラムに渡す。これはHTMLのISINDEX要素を用いて送信された情報を扱うのに便利である。
    • クライアントからのHTTPリクエストのBODY部はCGIプログラム標準入力に流し込まれる。また、その入力の長さが環境変数CONTENT_LENGTHに設定されている。これはHTMLフォームからPOSTメソッドで入力を受けるのに便利である。
    • CGIプログラムに対応する仮想パスの後に、更に余分のパスが続いた場合、その情報は環境変数 PATH_INFO に格納され PATH_INFO をウェブサーバの仮想パスと解釈した際に対応すべき物理パスが環境変数 PATH_TRANSLATED に格納される。この方式もまたCGIプログラムにユーザー側からパラメータを渡す目的でよく用いられる。
  • プログラムが標準出力に出力したデータは、ウェブサーバを経由してクライアントに送られる。このデータは正当なHTTPヘッダで始まらなければならない。
  • ただし、いくつかの特別なヘッダフィールドは「サーバディレクティブ」として解釈され、ウェブサーバの挙動(ステータスコードなど)に影響を与える。これ以外の全てのヘッダフィールドはそのままクライアントに送信される。
  • 現在のWWWではHTMLが中心的な役割を果たしているので、CGIプログラムはHTMLを出力するケースが圧倒的に多い。
    • 画像データなどを出力することもある(これはアクセスカウンタなどを作る際に使われる)。

[編集] 脚注

[ヘルプ]
  1. ^ http://hoohoo.ncsa.uiuc.edu/cgi/interface.html
  2. ^ http://www.ietf.org/rfc/rfc3875.txt

[編集] 関連項目

[編集] 参考文献

ウィキブックス
ウィキブックスCGI関連の教科書や解説書があります。

最終更新 2009年11月19日 (木) 14:45 (日時は個人設定で未設定ならばUTC)。
【Common Gateway Interface】変更履歴

ご利用上の注意