* 仕様書 [REFS[ - [5] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] -- [2] -- [6] '''''' ]REFS] * 構文 [11] [[CGI応答]]は、 - 1つ以上の[[頭欄]] - [CODE(ABNF)[[[NL]]]] - [[応答本体]] (省略可能) ... の3つの部分により構成されます。あるいは [[CGI応答]]は次の3種類に分類できます。 [RC[>>6]] - [[文書応答]] - [[局所リダイレクト応答]] - [[クライアント・リダイレクト応答]] * 文書応答 [12] [DFN[[RUBYB[文書応答]@en[document response]]]]は、[[クライアント]]に対して[[文書]]を返すものです。 [SRC[>>6]] - [13] [CODE(HTTP)@en[[[Content-Type:]]]] 欄は[['''必須''']]です - [14] [CODE(HTTP)@en[[[Status:]]]] 欄を指定することができます - [15] その他の[[頭欄]]を指定することができます - [16] [[応答本体]]を指定することができます [17] [[鯖]]は[[CGI応答]]を適宜変形して[[クライアント]]との[[プロトコル]]に適合するようにしなければ[['''なりません''']]。 [SRC[>>6]] ;; [18] そうできないときにどうしなければならないかは明記されていません。通常は適合といっても完璧に適合するかどうか[[鯖]]が検査するのではなく、 実用上十分な程度の要件を満たすよう整形や[[転送符号化]]等を適用するくらいです。 * 処理モデル [7] [[CGIスクリプト]]は常に空でない[[応答]]を[[鯖]]に送り返さなければ[['''なりません''']]。 [SRC[>>6]] [8] [[CGIスクリプト]]から[[鯖]]にデータを送る方法は[[システム定義]]です。 別途定義がない場合、「[[標準出力]]」[[ファイル記述子]]によってデータを送ることになります。 [SRC[>>6]] [9] [[CGIスクリプト]]は[[応答]]を準備するに当たり [CODE(CGI)@en[[[REQUEST_METHOD]]]] をチェックしなければ[['''なりません''']]。 [SRC[>>6]] [10] [[鯖]]は[[タイムアウト]]を設定して[['''構いません''']]。その場合、[[タイムアウト]]になると[[スクリプト]]を終了させて[['''構いません''']]。 [SRC[>>6]] * [CODE(CGI)@en[HEAD]] の場合 [1] [CODE(CGI)@en[[[HEAD]]]] [[メソッド]]の場合、 [[CGIスクリプト]]は[[応答本体]]を指定しては[['''なりません''']]。 [[鯖]]は指定されても捨てなければ[['''なりません''']]。 [SRC[>>2]] ;; [3] 多くの[[CGIスクリプト]]は [CODE(CGI)@en[[[HEAD]]]] [[メソッド]]に対応しておらず、 [CODE(CGI)@en[[[GET]]]] と同じものを返し、結果として >>1 の要件に違反しています。 * NPH スクリプトの場合 [4] [[NPHスクリプト]]は完全な [[HTTP]] [[応答メッセージ]]を返すことが求められています。 詳しくは[[NPH応答]]の項を参照してください。