[1] [[CGI]] の[DFN[[RUBYB[要求データ]@en[request data]]]]は、[[HTTP]] [[要求]]の[[メッセージ本体]]を[[鯖]]から[[CGIスクリプト]]に伝達する手段です。 * 仕様書 [REFS[ - [2] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] ([TIME[2011-11-20 06:09:05 +09:00]] 版) ]REFS] * 処理モデル [3] [[要求データ]]へのアクセス方法は[[システム定義]]ですが、別途定義されていない場合、 「[[標準入力]]」[[ファイル記述子]]/[[ファイル・ハンドル]]によって読み取れることになっています [SRC[>>2]]。 [4] [[要求データ]]は、 [CODE(CGI)@en[[[CONTENT_LENGTH]]]] の長さの[[メッセージ本体]]のデータと、 更にその後に続く余分なデータで構成されます。 [SRC[>>2]] [5] [CODE(CGI)@en[[[CONTENT_LENGTH]]]] が[[NULL]]でない場合は[[メッセージ本体]]がその長さ分提供されます。 [[鯖]]は最低でもその長さのデータを[[CGIスクリプト]]が読み取れるようにしなければ[['''なりません''']]。 [SRC[>>2]] [6] [[鯖]]はその後に[[EOF]]を続けても構いませんし、更に別のデータを続けても構いません。 [[CGIスクリプト]]はたとえそのような余分なデータがあったとしても、それを読もうとしては[['''なりません''']]。 [SRC[>>2]] [7] なお、[[CGIスクリプト]]はまったくデータを読まなくても[['''構いません''']]。 [SRC[>>2]] ;; [8] なぜ意味も無い余分なデータの存在を認めているのかは明記されていませんが、 データのやりとりに使う[[バッファ]]の類の管理の都合上、その方が良い場合もあるでしょうから、 それが不適切な実装とならないような配慮でしょうか。ただ [[CGIスクリプト]]が正確に動作することに依存した実装は一般的には安全ではありませんね。 [9] [[[NPHスクリプト]]に関しては、データは[[鯖]]が変更せずにそのままにして渡す[['''べきです''']]。 [SRC[>>2]] ;; [10] これは >>11 も適用されないということなのでしょうか。 [11] [[鯖]]は[[転送符号化]]を除去して [CODE(CGI)@en[[[CONTENT_LENGTH]]]] はそれを反映したものとしなければ[['''なりません''']]。 バッファ・サイズ等の理由でそれが不可能な場合は[[要求]]を[[誤り]]として拒絶する[['''べきです''']]。 [SRC[>>2]] [12] [[鯖]]は[[内容符号化]]を除去しても[['''構いません''']]。 [SRC[>>2]] その場合も [CODE(CGI)@en[[[CONTENT_LENGTH]]]] にそれを反映させる必要があります。 [13] [[鯖]]は[[NPHスクリプト]]以外では[[文字コード]]や[[MIME型]]の変換を適宜行なってから [[CGIスクリプト]]に引き渡して構わないと考えられます。