1

HTTPリクエストとそれに対応するレスポンスを照合するプログラムを作成しようとしています。ほとんどのシナリオですべてが正常に機能しているようです(転送が完全に順序付けられている場合とそうでない場合でも、TCPシーケンス番号を使用します)。

私が見つけた唯一の問題は、リクエストをパイプライン化したときです。その後、いくつかの応答がありますが、特定の要求に対する応答であるパケットとそうでないパケットがわかりません。別の投稿で、応答は順番に返されることを読みました。このプロパティをContent-Lengthフィールドの情報と組み合わせることが解決策のようです。問題は、Content-lengthが必須フィールドではないため、常に信頼できるかどうかわからないことです。

この機能をサポートするWebブラウザ(ほとんどの場合はそうではありません)が実際にどのように機能するかを知っている人はいますか?

4

2 に答える 2

3

本体の長さに関する情報は、ヘッダーに存在する必要があります。常に「content-length」であるとは限りません。それをすべて解決するには、関連するRFC 2616を調べる必要があります。特に、セクション4.4ではさまざまなヘッダーを扱います。

RFC 2616からのいくつかのより関連性のあるルール:

パイプライン化
の場合:サーバーは、要求が受信されたのと同じ順序でそれらの要求への応答を送信する必要があります。

9.2以降
応答本文が含まれていない場合、応答にはフィールド値が「0」のContent-Lengthフィールドが含まれている必要があります。

10.2.7から206部分コンテンツ
応答には、...を含める必要があります。Content-Rangeヘッダーフィールド...または各パートのContent-Rangeフィールドを含むmultipart /byterangesContent-Type。

14.13以降Content-Length
アプリケーションは、セクション4.4のルールで禁止されていない限り、このフィールドを使用してメッセージ本文の転送長を示す必要があります。

于 2011-08-08T10:10:01.260 に答える