\r\n\r\n
CGIとは、Common Gateway Interfaceの略。ウェブサーバーがプログラムを実行し、ウェブブラウザーの出力を生成するための標準的なプロトコルである。このプログラムは、CGIプログラム(またはCGIスクリプト)と呼ばれます。ユーザーのWebブラウザが特定のURLを要求すると、Webサーバーに代わって実行され、出力を生成する。
CGIはWebサイトを様々な面で強化します。ユーザー認証から総合的なショッピング・アプリケーションまで、CGIはWebをダイナミックでインタラクティブなものにする中心的存在です。ここでは、CGIを使ってユーザーエクスペリエンスを向上させる主な利点を紹介します。
HTMLファイル(JavaScriptやCSSも同様)は、ウェブサーバーから直接提供されます。一方、CGIプログラムは、特定のURLが要求されたときに、Webサーバーが実行するプログラムです。動的な情報(データベースに存在する情報など)へのアクセスを必要とするリクエストに対応するために使用されます。例えば、アクセスを許可するためのユーザー認証:ユーザー名とパスワードはデータベースに保存することができ、ユーザー認証のリクエストはこの情報へのアクセスを必要とします。このリクエストを処理するために、WebサーバーはCGIプログラムを実行して情報を探し出し、ユーザーを認証します。
Webサーバーは、HTMLファイルを提供したり、CGIプログラムを実行して動的に出力を生成する機能を提供するHTTPサーバーソフトウェアが動作します。 HTTPサーバーソフトウェアは、特定のパターンに一致するURLを要求されたときに特定のプログラムを実行するようにWebサーバー管理者によって設定されます。
ユーザーのブラウザが特定のURLにリクエストを出すと、ブラウザはHTTPヘッダーと場合によってはHTTPボディの形で多くの情報を送信します。その中には、以下のようなものが含まれる場合があります。
CGIは、この情報の一部または全部を使って、リクエストを処理し、ユーザーへの出力をカスタマイズすることができます。
CGIの主な用途は、HTMLのフォームを扱うことです。
HTMLフォームは、ユーザーが入力を行えるようにさまざまなコントロールを提供するユーザーインタラクションデバイスです。ユーザーがフォームの送信ボタンなどをクリックすると、Webブラウザがフォームの情報を集約して、フォームに記載された送信先のURLに送信する。一方、Webサーバーは通常、CGIプログラムを呼び出して、ユーザーから収集したすべての入力を送信する。このやりとりはフォームPOSTと呼ばれ、CGIがフォームの内容を処理し、適切なレスポンスを生成してブラウザに送信する方式の技術用語です。
以下は、pythonで書かれたCGIプログラムのサンプルです。これは、次のようなURLからアクセスできるようにWebサーバーに配置することができます。http://www.example.com/cgi-bin/env.cgi。呼び出されると、CGIはその環境にあるWebサーバーから受け取ったすべての変数を報告します。これは、CGIプログラムとしては非常にシンプルなものです。
#!/usr/bin/pythonimport osprint "Content-type: text/plain"for key in os.environ: print key, "=>\"", os.environ[key], "\""cgiは、Webの黎明期からほとんどWebサーバーの一部となっています。史上初のWebサーバーであるNCSA HTTPd Webサーバーは、当初、静的ファイルのみをサポートしていました。そして、URLのリクエストに応じてスクリプトを実行することで、Webサーバーが動的なコンテンツを生成できることが認識され、CGI仕様が誕生したのである。
初期のCGIプログラムは、Perl、Tcl、shellなどの言語で書かれたシンプルなスクリプトでした。また、C/C++などのコンパイル言語で記述することも可能ですが、その場合はプログラムをコンパイルして実行可能なCGIを作成するという工程が追加されます。
CGIが複雑化し、ユーザーの要求が高まるにつれ、各リクエストを処理するために個別のCGIプロセスを作成することは、メモリとCPUのオーバーヘッドの点で負担が大きすぎると認識されるようになりました。特に、リクエストに対応する時間が、新しいプロセスを作る時間よりも短い場合は、その傾向が顕著でした。
この時点で、Webサーバーは高度なスクリプトインタプリタを組み込み、ユーザーのリクエストを1つのWebサーバープロセス内の別々のスレッドで処理できるようになった。これにより、リクエストの処理効率が上がり、レスポンスタイムが短縮されました。
これは、PHPのようなWebに特化した新しい言語の出現と重なります。PHPのインタープリタは、CGIプログラム自体から始まります。リクエスト処理の一環として、リクエストファイル内のPHPコマンドを解析し、そのコマンドを実行します。
現在では、CGIスクリプト以外にも、リクエストに応じてサーバー上でコードを実行する手法が多く使われています。
会社のホームページでCGIスクリプトを使用しているところはありますか?CGIスクリプトの導入やメンテナンスで、特に問題になったことはありますか?以下のコメント欄で議論してください。