setContentLengthはハイに設定されています
-
26-12-2019 - |
質問
setContentLength
メソッドを使用して、実際のサイズより高いサイズの応答の長さを設定するために、なぜコンテナが長さを計算しないのですか?
例えば
String s = "hello";
byte[] b = s.getBytes();
response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.
サーブレットを打つときには、ページをロードするために約半分かかります。これは、コンテンツ長ヘッダーのためです。
そのような方法の必要性は何ですか?なぜコンテナはそれ自体で応答の長さを計算するように作られるのですか?
解決
大きなコンテンツを返す場合は、TEフルレスポンスをロードして一度に送信することは現実的ではなく、代わりにロードしてチャンクで送信します。長さは応答の始まりの一部として送信されるので、コンテナが後で変更する方法はありません。
この場合、応答が100バイトのコンテナに指示すると、最初の5バイト(ヘッダ "content-length:100"を送信するために送信します。これで受信者はさらに95バイトを期待します。
今方一方で、あなたのコンテンツが10GBだったと言って、コンテナがサイズを計算するように最初にメモリにロードしたくないでしょう。
所属していません StackOverflow