[1] CGI を介して鯖とやり取りするスクリプトを CGIスクリプトと言います。ここでいう「スクリプト」は単独で実行されるプログラムあるいは “スクリプト”でなくても、ライブラリーの類であったり、静的に組み込まれた関数のようなものですらあっても構いません。
[4] 俗に、CGIスクリプトを指して単に「CGI」と呼ぶこともあります。
[5] CGI の仕様書内では単にスクリプトと呼ばれています。
[8] 別途規定がない限り、CGIスクリプトを含んだファイルは実行可能プログラムとして呼び出されます >>7。
[9] CGIスクリプトは鯖からメタ変数および要求メッセージ・データを受け取ります。 鯖はこの要求メッセージ・データを直ちにCGIスクリプトから利用可能とする必要はなく、 その準備ができていない段階であっても (クライアントから到着していない段階であっても) CGIスクリプトを起動して構いません。 >>7
[11] 鯖は誤りが発生したらいつでも警告無くCGIスクリプトの実行を中断、 終了できます。例えば鯖とクライアントの通信路で失敗があったときに実行を中断して構いません。 従ってCGIスクリプトは非正常な終了を処理できるように準備するべきです。 >>7
[12] 鯖はタイムアウトによりスクリプトを中断させても構いません。
[20] 例えば、CGIスクリプトはプッシュなどの目的で無限に長い応答を返すことがあります。 HTTPクライアントがHTTP接続を閉じることでHTTPサーバーからの応答の送信は終了することになりますが、 そのままではCGIスクリプトがHTTPサーバーに応答を送り続けますから、 HTTPサーバーはこれを停止させなければなりません。
[14] AmigaDOS ではスクリプトの現在作業ディレクトリーはそのスクリプトがあるディレクトリーに設定されます。 Unix と POSIX 環境ではそのスクリプトがあるディレクトリーに設定されるべきです。 >>13
[19] IIS は CGIスクリプトの実行時に現在作業ディレクトリーを変更しておらず、 世間では不具合であると認識されていましたが、その後修正されたかどうかは未確認です。
[16] AmigaDOS ではメタ変数や頭欄で US-ASCII を使います。 NL は LF です。鯖は CRLF も NL として受け付けるべきです。 >>13
[17] Unix ではメタ変数、頭欄、 CHAR に NUL
を除く US-ASCII を使います。 TEXT には ISO-8859-1 を使います。
PATH_TRANSLATED
には NUL
以外の任意の8ビット・バイトを使います。
NL は LF です。鯖は CRLF も NL として受け付けるべきです。
>>13
NULL
は文字列の終端を表します。
HTTPサーバーは要求に含まれる NULL
を適切に処理しないと、
CGIスクリプトを誤動作させることができるかもしれず、注意が必要です。[18] EBCDIC を使う POSIX ではメタ変数、頭欄、 CHAR、TEXT、
PATH_TRANSLATED
に NUL
を除く IBM1047 を使います。
NL は LF です。鯖は CRLF も NL として受け付けるべきです。
>>13
[22] CGI で取り扱う構造を扱えるプログラミング言語であれば、どんな言語でもCGIスクリプトを記述できます。
[24] 初期も初期の解説だと Perl だけでなく C とかシェルスクリプトとか複数の言語に言及してなんなら複数の例文が載ってたりもするのが普通だったよな、そういえば。
[25] CGI = Perl なんておかしなこと言い出す人が出てきたり 「CGI/Perl」 みたいな謎の用語ができたりしたのはその一世代後ってことか。
[26]
実際問題シェルスクリプトで実用レベルのWebアプリケーション (当時はそんな言葉なかったが) を作るのは困難でちょっとしたツール的なものに使うこともある程度、
C はコンパイルが必要だから当時のレンサバ環境だと利用困難で敬遠されてた
(telnet
接続ができるWebサーバーを提供している ISP と契約してるみたいなケース (まあ珍しくはなかったけれど) でないと使えない、
手元でコンパイルして FTP でアップロードすればいいのだけどうまく環境を合わせるのはなかなかハードルが高かろう、 VM とかなかった時代だぞ、サーバーも多分まだ Linux でなくて商用UNIXの何かだしそんなの普通の人の手元にはないよな、クロスコンパイルできたんか?)
ので高速化が必要なら C だよねと言われてはいたけど実際使ってた人はどれくらいいたのか
(アクセス数が多い商用サービスを提供していたところは使っていたのだろうけど)
ってな感じだったから、
消去法でも Perl しかない感じに収束していったのは仕方ないのだろうけど。