私の質問はcgiについてです。Perl スクリプトを .cgi ファイルとして保存したかどうか疑問に思いました。サーバーに、それが Perl スクリプトであり、他のものではないことを知らせる実際のメカニズムは何ですか? ソース ファイルの先頭にがあることは知ってい #!/usr/local/bin/perl
ますが、これも Perl プログラミング言語の一部であるため、サーバーは実行を開始する前にそれが Perl スクリプトであることを認識している必要があります。
2 に答える
HTTP サーバーは通常、指定されたファイルをクライアントに送信するだけです。サーバーの構成によって、代わりにどのファイルが実行され、その出力が返されるかが決まります。
たとえば、一般的なApache httpdサーバーの構成ファイルは です。httpd.conf
具体的には、Include
そこから d されたファイルの 1 つです。ソフトウェアのバージョン、ホスト オペレーティング システム、ディストリビューションによって大きく異なります。
基準は、ファイルがファイル構造内のどこにあるか、またはその名前に基づいています。
次のようなScriptAliasディレクティブ
ScriptAlias /cgi-bin
ディレクトリ内のすべてのファイルが/cgi-bin
CGIスクリプトとして扱われることを示しています。
または、次のようなAddHandlerディレクティブ
AddHandler cgi-script .cgi
拡張子を持つすべてのファイルは、.cgi
どこにいても CGI スクリプトとして実行されます。
サーバーが接尾辞を認識するように構成されている場合.cgi
、おそらくexec*()
関数のいずれかを使用して、ファイルを実行するだけです。
Unix ライクなシステムでは、ファイルが で始まるテキスト ファイルの場合#!
、システム カーネル自体がその行を使用して、ファイルをスクリプトとして実行するために起動するインタープリターを決定します。
CGI スクリプトは、任意のインタープリター言語 (Perl、Python、bash、sh、ruby など) で作成できます。
さらに言えば、任意の実行可能ファイルを CGIスクリプトプログラムとして使用できます。たとえば、C、C++、または Ada プログラムをコンパイルして実行可能ファイルを作成.cgi
し、ファイル名に接尾辞を付けて適切なディレクトリにインストールすると、Web サーバーはそれを直接実行できます。スクリプト言語はこの種の作業に便利な傾向があるため、一般的には行われませんが、Web サーバーは、呼び出す実行可能ファイルの種類や、カーネルがそれを呼び出す方法を気にしません。
(詳細は、Windows では少し異なる可能性が高く、通常はファイル拡張子を使用して実行可能ファイルの起動方法を決定します。)