CGI は、情報サーバーが別のプログラムにデータを渡す方法の標準的な定義であることを理解することが重要です。
共通ゲートウェイ インターフェイス (CGI) は、プラットフォームに依存しない方法で、情報サーバーの下で外部プログラム、ソフトウェア、またはゲートウェイを実行するための単純なインターフェイスです。現在、サポートされている
情報サーバーは HTTP サーバーです。
このインターフェースは、1993 年以来 World-Wide Web で使用されています。この仕様は、「CGI/1.1」として知られるインターフェースと
、Unix(R) および AmigaDOS(tm) システムでのその使用法を定義しています。
標準モデルでは、Web サーバーは必要になるたびに外部プログラムを開始し、データを標準形式にマーシャリングして、[環境の一部として、または外部プログラムの標準入力を介して、プログラムに渡します。 HTTP メソッド (GET、POST など) が使用されます。プログラムはデータを処理し、ヘッダーとコンテンツを標準出力に出力してデータを返し、終了します。
CGI の主な欠点は、呼び出しのたびに外部プログラムを開始する費用です。Unix では、これには Web サーバーがメモリ内にそれ自体のコピーを作成し (fork)、そのコピーに外部プログラムをオーバーレイする (exec) 必要があります。fork/exec サイクルは、特に Perl インタープリターでオーバーレイされた大規模な Apache プロセス (数 MB のメモリ フットプリント) について話している場合、計算コストが高くなります。Perl プログラムを実行する前に解析する必要があります。
方程式から fork/exec サイクルを取り除くために、いくつかの新しいものが開発されました。Mod_perl は、Perl インタープリターを apache プロセスに組み込み、呼び出しごとに fork/exec する必要をなくし、解析された perl プログラムのキャッシュも可能にします。さまざまな組織によって報告された数値によると、スループットの増加は CGI の 20 倍から 100 倍です。
FastCGI と呼ばれる 2 番目の方法もほぼ同時期に開発されました。FastCGI では、外部プログラム (多くの場合、コンテナーまたはアプリケーション サーバー) が http サーバーの開始と同時に開始され、http サーバーが要求を FastCGI プロセスにプロキシします。このモデルは fork/exec サイクルを削除するのと同じ利点を提供し、mod_perl とは異なる一連の長所と短所があります。
最終的に、CGI/FastCGI/mod_perl のいずれを選択しても、プログラムは Web サーバーから渡されたデータを取得する方法を理解する必要がありました。これが問題の核心です。ほぼすべてのポスト CGI テクノロジが独自に定義しています。プログラムとの間でデータをやり取りする方法 (PSGI の GI は依然としてゲートウェイ インターフェイスを表します) ですが、採用を容易にするために、推奨される方法を CGI モデルに変換するアダプターを提供します。
あなたの質問に答えたかどうかはわかりませんが、質問していただきありがとうございます。私はこの答えを書くのを楽しんだ;-)