Common Gateway Interface
- العربية
- Azərbaycanca
- Boarisch
- Български
- বাংলা
- Català
- Čeština
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- עברית
- हिन्दी
- Magyar
- Bahasa Indonesia
- Íslenska
- Italiano
- 한국어
- Lietuvių
- Nederlands
- Norsk bokmål
- Polski
- Português
- Русский
- Slovenčina
- Slovenščina
- Svenska
- தமிழ்
- ไทย
- Türkçe
- Українська
- 中文
- 粵語
Common Gateway Interface(コモン・ゲートウェイ・インタフェース、CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。 [1] [2] [3]
ウェブサーバプログラムの機能の主体は、あらかじめ用意された情報を利用者(クライアント)の要求に応じて送り返すことである。そのためサーバプログラム単体では情報をその場で動的に生成してクライアントに送信するような仕組みを作ることはできなかった。 そこでサーバプログラムから他のプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案された。それを実現するためのサーバプログラムと外部プログラムとの連携法の取り決めが CGI である。
CGI は環境変数や標準入出力の扱えるプログラミング言語であれば、どの言語を用いても作成することができるが、主にPHP、Perl、Javaで作成されることが多い。
代表的なアプリケーションには、電子掲示板、アクセスカウンタ、ウィキやブログシステムなどがある。
仕様
[編集 ]CGI の仕様はNCSAにより最初に定義・実装(NCSA HTTPdにおいて)され、現在の最新版はCGI1.1である。2004年にRFC 3875となった。
CGI は、典型的には以下のような動作を期待される。CGIを経由して実行されるプログラムのことを、CGIプログラムと呼ぶ。
- CGIプログラムはウェブサーバがクライアントからのリクエストに応じて起動する。
- 典型的には、ウェブサーバの公開領域に置かれたプログラムに対応するURIへのリクエストがあると、サーバはそのCGIプログラムをCGIの取り決めに従って呼び出す。
- CGIプログラムへの情報の入力は、コマンドライン引数、環境変数、標準入力によって行われる。
- ウェブサーバがCGIプログラムを呼び出す時点でいくつかの環境変数を定義することが定められている。
- 特に、クライアントがサーバに要求したURIのうち、検索文字列(Query String)部が環境変数
QUERY_STRINGに設定されるので、これはHTMLフォームからGETメソッドで入力を受けるのに便利である。 QUERY_STRINGに文字「=」が含まれない場合は、サーバはQUERY_STRINGの内容をコマンドライン引数としてCGIプログラムに渡す。- クライアントからのHTTPリクエストのボディ部はCGIプログラム標準入力に流し込まれる。また、その入力の長さが環境変数
CONTENT_LENGTHに設定されている。これはHTMLフォームからPOSTメソッドで入力を受けるのに便利である。 - CGIプログラムに対応する仮想パスの後に、更に余分のパスが続いた場合、その情報は環境変数
PATH_INFOに格納されPATH_INFOをウェブサーバの仮想パスと解釈した際に対応すべき物理パスが環境変数PATH_TRANSLATEDに格納される。この方式もまたCGIプログラムにユーザー側からパラメータを渡す目的でよく用いられる。
- プログラムが標準出力に出力したデータは、ウェブサーバを経由してクライアントに送られる。このデータは正当なHTTPヘッダで始まらなければならない。
- ただし、いくつかの特別なヘッダフィールドは「サーバディレクティブ」として解釈され、ウェブサーバの挙動(ステータスコードなど)に影響を与える。これ以外の全てのヘッダフィールドはそのままクライアントに送信される。
現在のウェブではHTMLが中心的な役割を果たしているので、CGIプログラムはHTMLを出力するケースが圧倒的に多い。
- 画像データなどを出力することもある(これはアクセスカウンタなどを作る際に使われる)。
CGI以外の手法
[編集 ]近年では、ウェブサーバから外部のプログラムを呼び出すという負荷の大きい動作を避け、ウェブサーバの一部としてインタプリタを常時起動させておくことにより性能を向上させた mod_perlや、PSGI(Perl)、mod_php、FastCGI、WSGI(Python) などのインタフェース・実装が一般的である。
このため、比較的新しいウェブサーバアプリケーションでは、CGIを直接動作させる機能を持たないものも存在する。
- Nginx: FCGI Wrapにより、FastCGIとして動作させる。
- H2O: fastcgi-cgiにより、FastCGIとして動作させる。
- OpenBSD httpd: slowcgiにより、FastCGIとして動作させる。
脚注
[編集 ]関連項目
[編集 ]参考文献
[編集 ]- The CGI Specification(archive.org)
- RFC 3875 The Common Gateway Interface (CGI) Version 1.1
- RFC 1630 Universal Resource Identifiers in WWW
- RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1
この項目は、インターネットやウェブに関連した書きかけの項目 です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。