2011-08-01 4 views
1

クライアントのブラウザからApacheのhttpd Webサーバには、TCP/IP(ソケット)を介して明確に定義されたプロトコルHTTPがあります。私はApacheのhttpdウェブサーバからPerlやPHP、あるいはCGIにどのチャネル/プロトコルが使われているのか理解するのに苦労していますか?それはプロセス間通信か、ソケットかピペットかメッセージキューか信号か?誰かが本当にシーンの後ろに何が起こっているかについて光を当てることができますか? Apacheのhttpd Webサーバーが別のプログラム(PerlまたはPHP)を実行し、出力をキャプチャしてからクライアントのブラウザに再送信するかのようですか?Apache WebサーバーはPerl、PHP、またはCGIとどのように通信し、出力を取得して応答を返しますか?

Linux Server Securityから:

CGIプロトコルは、WebサーバがCGIプログラムと通信する方法を指定しません。 Apacheは、CGI要求を受けた外部プ​​ログラムへの双方向のパイプをオープンし、それをCGI入力データを送信し、プログラムの出力を返します

スタンドアロンCGIプログラム:二つの主要な解決策がありましたクライアント。別のプロセスとして、Webサーバーを停止せずにプログラムがクラッシュする可能性があります。欠点は、新しいプロセスを開始するのが比較的遅いことです。

内蔵CGIプログラム

プログラムは、Apacheモジュールのように書き換えると、Apacheプロセスが起動したときにのみその起動コストが発生しています。これは外部プログラムよりもはるかに高速で、Apacheの内部および他のモジュールにアクセスできます。 Apacheで最も一般的なCGIモジュールは、Perl(mod_perl)とPHP(mod_php)用のインタープリタエンジンです。

+0

はおそらくサーバーフォールトに属しています...プログラミングに関する質問ではありません –

+0

@Jeffrey、私は同意しません、この質問はCGIプログラミングの基本についてです。 – Fozi

+0

しかし、彼はプロセスがどのようにコードを使ってそれを実装する方法ではないかについて質問しています... –

答えて

6

CGIプログラムとの通信は、単純なIOリダイレクト(つまりSTDINとSTDOUT)と環境変数の2つのチャネルで行われます。

HTTPサーバーがCGIのSTDINに要求を送信します。 CGIのSTDOUTからHTTPレスポンスを読み込み、それを少し変更してクライアントブラウザに送信します。追加のサーバーデータ(要求サイズや一部のサーバーパラメーターなど)は、通常はHTTP_で始まる環境パラメーターに設定されます。

+1

mod_perlまたはmod_phpで動作する非CGIプログラムとの通信に関する段落を追加できますか? – daxim

+0

「CGIのSTDINにリクエストを送る」と言ったらどういう意味ですか?あなたは新しいプロセスを開くことを意味しますか? – Pacerier

+0

@Pacerierそれは正しいです。 – Fozi

関連する問題