[1] CGI の要求データは、HTTP 要求のメッセージ本体を鯖からCGIスクリプトに伝達する手段です。
[3] 要求データへのアクセス方法はシステム定義ですが、別途定義されていない場合、 「標準入力」ファイル記述子/ファイル・ハンドルによって読み取れることになっています >>2。
[4] 要求データは、 CONTENT_LENGTH
の長さのメッセージ本体のデータと、
更にその後に続く余分なデータで構成されます。 >>2
[5] CONTENT_LENGTH
がNULLでない場合はメッセージ本体がその長さ分提供されます。
鯖は最低でもその長さのデータをCGIスクリプトが読み取れるようにしなければなりません。
>>2
[6] 鯖はその後にEOFを続けても構いませんし、更に別のデータを続けても構いません。 CGIスクリプトはたとえそのような余分なデータがあったとしても、それを読もうとしてはなりません。 >>2
[7] なお、CGIスクリプトはまったくデータを読まなくても構いません。 >>2
[9] NPHスクリプトに関しては、データは鯖が変更せずにそのままにして渡すべきです。 >>2
[11] 鯖は転送符号化を除去して CONTENT_LENGTH
はそれを反映したものとしなければなりません。
バッファ・サイズ等の理由でそれが不可能な場合は要求を誤りとして拒絶するべきです。
>>2
HTTP_TRANSFER_ENCODING
の値をどうするべきかは不明瞭です。[12] 鯖は内容符号化を除去しても構いません。 >>2
その場合も CONTENT_LENGTH
にそれを反映させる必要があります。
HTTP_CONTENT_ENCODING
も変更する必要があると思われますが、明記されていません。[13] 鯖はNPHスクリプト以外では文字コードやMIME型の変換を適宜行なってから CGIスクリプトに引き渡して構わないと考えられます。
[16] CGIスクリプトは要求データを読み込む前に CONTENT_LENGTH
をチェックしなければなりません。また CONTENT_TYPE
もチェックするべきです。 >>15
[21] CGI から派生した仕様も、CGI の仕様を引きずっています。
[22] PSGI では、標準入力に相当するファイルハンドル風オブジェクトが
$env
に含まれており、PSGIアプリケーションはそこから CONTENT_LENGTH
分読み込むことが期待されています。
[23] 要求データの長さを CONTENT_LENGTH
メタ変数としてアプリケーションに引き渡さなければならないという制約のため、
サーバーは要求データの長さが確定するまでアプリケーションを起動できません。