web-dev-qa-db-ja.com

チャンクエンコーディングとコンテンツ長ヘッダー

Content-lengthヘッダーを設定し、チャンク転送エンコーディングを使用することは可能ですか?そうすることで、チャンクを使用するときにクライアント側で応答の長さがわからないという問題を解決できますか?

私が考えているシナリオは、転送するファイルが大きく、そのサイズを決定するのに問題はないが、ファイルが大きすぎて完全にバッファリングできない場合です。 (チャンクを使用していない場合は、最初に応答全体をバッファリングする必要がありますか?そうですか??)

ありがとう。

23
p00ya00

1)いいえ:「メッセージにContent-Lengthヘッダーフィールドと非ID転送コーディングの両方を含めてはなりません。メッセージに非ID転送コーディングが含まれている場合は、Content-Lengthを無視する必要があります。」 ( RFC 2616、セクション4.4

2)いいえ、あなたはContent-Lengthとstreamを使用できます。プロトコルは、実装の動作を制約しません。

29
Julian Reschke

そうですね、ファイルのサイズを示すヘッダーをいつでも送信できます。 response.addHeader("File-Size","size of the file");のようなもの
そしてContent-Lengthヘッダーを無視します。

この値を読み取るには、クライアントの実装を微調整する必要がありますが、必要な両方を実現できます:)

10
Gyan

Content-Lengthまたはチャンクのいずれかを使用する必要がありますが、両方を使用することはできません。

事前に長さがわかっている場合は、コンテンツをその場で生成し、バッファに一度にすべてを入れない場合でも、チャンクの代わりにContent-Lengthを使用できます。

ただし、プロキシがデータを処理できない可能性があるため、データが非常に大きい場合は、これを行わないでください。大きなデータの場合、チャンク化の方が安全です。

0
Bruce