HTTP要求メソッドとヘッダーに基づいて、HTTPサーバーは、HTTP要求ヘッダーの終了CRLFCRLFの後にメッセージ本文を期待するかどうかを判断する必要があります。 、それは何バイトの長さですか。HTTP要求メッセージ本文の存在と長さ
この計算はどのように行われますか?要求メソッドとヘッダのどのような機能によって、要求メッセージ本文の長さを計算できますか。
フォロー:ヘッダを解析した後ので
HTTPサーバは、単純に次の操作を実行できます。
size_t RequestMessageBodyLength()
{
if (RequestHeaderExists("Content-Length"))
return RequestHeaderValue("Content-Length");
else
return 0;
}
は、上記でカバーされていないが、コーナーケースはありますか?
は
上記を参照してください –
あなたはContent-Lengthの長さの単一のバッファを割り当てていると仮定していますが、単純にそれらの合計量のチャンクをストリームすることができます。 HTTP 1.1 Keep-AliveをサポートするためにContent-Lengthフィールドを尊重する必要があります。そうしないと、1つのリクエストがいつ終了し、新しいリクエストが開始されるかを知る方法がありません。 –
@ user1131467しかし、「どこに行くかはどこにあるのか」はアプリケーションによって異なります。 1つのアプリケーションでは、CGIを使用していて、子プロセスのファイル記述子をリダイレクトするだけで、アプリケーションを書いた人は誰でもセキュリティを気にすることができます。しかし、別のアプリケーションでは、Railsのようなサーバーを書くかもしれません。Rubyコードの実行が始まると、ブラウザーがキーと値のペア "password = secret"を投稿したかどうかを知りたいと考えます。その場合は、すべてのデータが到着するのを待ってから、説明したDoS攻撃から防御するためにタイムアウトを使用する必要があります。 –