
Common Gateway Interface
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により最初に定義・実装(NCSA HTTPdにおいて)され、現在の最新版はCGI1.1である。2004年にRFC 3875となった。
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回か調子のいい時は2、3回行ってしまう事もあります。場所は、道玄坂をまんなかくらいまで登った百軒店というところにあって、いかにもピンク街って感じのそわそわする所なんですよね。同じ場所に渋谷のエステ風俗とか、人妻 風俗もあるので、気分によってはお店を変えてみたり、いろいろ楽しめる感じです。
他によく行くエリアとしては、上野 風俗なんですけど、これがまた仲町通りっていう歓楽街みたいなとこにあって、夜いくとキャッチ・キャッチ・キャッチの嵐で困ります。最初にいった時なんて、おじさんが話しかけて来て「どこのお店さがしてんの?」って言うから上野のエステ風俗ですって言ったら、「あぁ。あそこね」じゃコッチ来てとかいって、案内してくれたんですけど見るからに異国の地で、まじでアセリマクリスティーになっちゃいました。人が真剣に探してるのに、全然違う店に連れていくって・・・どんな神経してるんでしょうかね。まぁ、ソッコーで帰ったんで被害は何もなかったんでいいんですけどね。
その上野のほど近くには御徒町 風俗があって、そっちはマンションの中というかマンションの地下の飲食街にあって爽やかに通う事ができます。近くにはアメ横があって、休みの日には買い物がてら・・・というか、風俗がてら買物をして帰ることもしょっちゅうあります。同じ受付に御徒町のエステ風俗もあるので、最近はそっちにひっそりと行くことが多いですね。やっぱり繁華街のど真ん中にあるよりは、隠れ家的にいけるトコが絶対にいいと思います。そうそう、上野 人妻もそっちの方にあって、一石三鳥みたいな感じがします。今日は若い子、お姉さんドッチにしようかなぁ~なんて時は両方見ちゃえばいいんですから。移動もないし楽ですね。
基本的に私は山手線上の地域にしか行かないんですけど、最近は横浜あたりもちょっと気になってるんですよね。といっても、ドコいっても基本的に内容なんて変わらないからイイヤとか思って、最終的にはいつものトコになっちゃいますけどね(笑)女の子からとってみてもそうなんですよね。基本的に、どこの風俗 求人サイトを見ても同じことばっか書いてあるし、高収入アルバイトをする場所が家の近くだったり、もしくは友達などの行動範囲より外を選ぶってだけで、あとは稼げればイイヤって感じですよね。でもこの業種って、すごい高収入なバイトですよね。男性の高収入では、1日に3万とか5万とか稼ぐのは、かなり危ないことをしないとダメだし、ホストだってそんな稼ぐのはごく一部だしね。だから男の犯罪者と女の犯罪で見ても、圧倒的に男が多いんだろうね。それはもう、江戸時代とかそれ以上のもっと昔から、男は盗賊、女は遊女みたいな風習があったんだしね。
まぁ、そんな話はさておき、次によく行くお店の話をしましょか。私が最近ハマっているのが池袋 風俗っていうお店で、ここのすごいところは、とにかくかわいい子がバンバン入店しまくりだってトコ。さすがブクロ!山手線の乗降数もトップ3には入るこのエリアですから、男も女も他のエリアと比べて圧倒的に大多数なんでしょうかね。私もよく行く地域なので、早いとこ池袋のエステ風俗も開店してくれないかなぁ~。まぁ、近いうちにはやるんでしょうけど、待ちきれない!たぶんそうこう言ってる間にもいつのまにかオープンしてるってオチなんですけどね、いつもオープンに乗り遅れて数日後、数週間後に汁ってことが多いです。あとこのエリアってのは、昔から池袋 人妻がすっごく多いような気がします。あっちゃこっちにお店があって、もちろん若い子のお店の方が多いんだろうなぁとは思いますけど、それにしても他の地域と比べても圧倒的な数があるのは何でだろう?
私の昔のイメージだと、やっぱり眠らない街「歌舞伎町」。深夜に行っても早朝にいってもギラギラした新宿 風俗が沢山メニメニーあるのがすごかったけど、最近はめっきりと減ってしまった感じがします。最近は新宿のエステ風俗に行くことが多くなったんですけど、やっぱりマッサージのお店の女子はいつも新鮮なさわやかな風を送ってくれます。新宿 人妻のような、ハードで濃厚なサービスのお店にもふいに行きたくなるときもありますけどね。