Common Gateway Interface
*しゅってん:フリーひゃっかじてん『ウィキペディア(Wikipedia)』*
Common Gateway Interface*(コモン・ゲートウェイ・インタフェース、*CGI*)は、**ウェブサーバ**うえでユーザ**プログラム**をどうささせるためのしくみ。げんそんするおおくのウェブサーバプログラムはCGIのきのうをりようすることができる。*
*ウェブサーバプログラムのきのうのしゅたいは、あらかじめよういされたじょうほうをりようしゃ(**クライアント**)のようきゅうにおうじておくりかえすことである。そのためサーバプログラムたんたいではじょうほうをそのばでどうてきにせいせいしてクライアントにそうしんするようなしくみをつくることはできなかった。そこでサーバプログラムからたのプログラムをよびだし、そのしょりけっかをクライアントにそうしんするほうほうがこうあんされた。それをじつげんするためのサーバプログラムとがいぶプログラムとのれんけいほうのとりきめが*CGI*である。*
*CGIはかんきょうへんすうやひょうじゅんにゅうしゅつりょくのあつかえる**プログラミングげんご**からならげんごのべつをとわずはばひろくりようできるが、じっこうそくどやテキストしょりのたやすさなどのかねあいにより*Perl*がつかわれることがおおかった。きんねんでは、Perlにくわえて*Python*、*Ruby*などもひろくつかわれている。*
*だいひょうてきなアプリケーションには、**でんしけいじばん**、**アクセスカウンタ**、*Wiki*や*Blog*システムなどがある。*
*きんねんでは、Webサーバのプロセスとしてインタプリタをじょうちゅうさせておくことにより、CGIからプログラムをよびだすオーバヘッドをへらし、パフォーマンスをこうじょうさせた*Java Servlet*や*mod_perl*、*mod_php*、*FastCGI*などのじっそうもしゅつげんしている。*
*もくじ* |
[*へんしゅう*] *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のうち、けんさくもじれつ(QueryString)ぶがかんきょうへんすう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をしゅつりょくするケースがあっとうてきにおおい。*
- *がぞうデータなどをしゅつりょくすることもある(これは**アクセスカウンタ**などをつくるさいにつかわれる)。*

