Common Gateway Interface

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

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

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

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

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

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


目次

CGIに関するよくある誤解

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

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


仕様

CGIの仕様はNCSAにより最初に定義・実装され、現在の最新版は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関連の教科書や解説書があります。

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net