コモン・ゲートウェイ・インタフェース (CGI) について
コモン・ゲートウェイ・インタフェース(CGI)は、ウェブサーバ上でユーザプログラムを実行するための標準的な方式です。この仕組みにより、ユーザからのリクエストに基づいて動的なコンテンツを生成し、返すことが可能になります。従来のウェブサーバプログラムは静的に情報を提供するだけだったため、CGIの導入により、インタラクティブなウェブアプリケーションの開発が実現しました。
CGIは、サーバがクライアントからの要求を受け取った際に、他のプログラムを呼び出すことで、リアルタイムで情報を生成し、それを応答として返す仕組みを提供します。CGIプログラムは、環境変数や標準入出力が扱える任意の
プログラミング言語で作成可能であるため、主にPHP、Perl、Javaなどが使用されることが多いです。
CGIの基本的な動作
CGIプログラムは、ウェブサーバがクライアントからのHTTPリクエストに応じて実行されます。リクエストしたURIに対応するプログラムが公開領域に配置されている場合、サーバはそのCGIプログラムを呼び出します。
CGIプログラムに対する入力は、コマンドライン引数や環境変数、標準入力から行われます。具体的には、クライアントが要求したURIの一部である検索文字列は環境変数 `QUERY_STRING` に格納されます。この情報は、HTMLフォームからのGETリクエストに役立ちます。また、クライアントから送信されたデータは、CGIプログラムの標準入力に流し込まれます。
さらに、特定の環境変数を通じて追加の情報がCGIプログラムに渡されることもあります。たとえば、URIの余分な部分は `PATH_INFO` に格納され、物理的なパスは `PATH_TRANSLATED` に設定されます。こうした機能を通じて、ユーザはCGIプログラムに対してパラメータを送信し、様々な出力を得ることが可能となります。
CGIの出力とHTTPヘッダ
CGIプログラムがデータを出力する際は、特に正しいHTTPヘッダを伴って行う必要があります。出力の最初には、必ず適切なHTTPヘッダが含まれていなければなりません。また、一部のヘッダフィールドは「サーバディレクティブ」として解釈され、サーバの動作に影響を与えることがあります。一般的に、CGIプログラムはHTMLを出力することが多く、場合によっては画像データを生成することもあります。
近年のCGIの代替手段
CGIはその便利さから広く利用されていますが、ウェブサーバから外部プログラムを呼び出す際の負担が大きいため、近年では他の技術が一般的となっています。例えば、mod_perlやFastCGI、WSGIなどのインターフェースは、ウェブサーバ内でインタプリタを常駐させ、性能を向上させています。このような新しいウェブアプリケーションの中には、CGIとしての機能を持たないものも増えています。
CGIは、開発者に柔軟性を提供する一方で、負荷や性能の問題のために、他の方法に置き換えられつつあります。しかし、その原則に基づくアイデアは、今なおウェブ開発の重要な基盤として機能しています。