SetContentLength устанавливается высоким
-
26-12-2019 - |
Вопрос
Когда метод setContentLength
используется для установки длины отклика с более высоким размером, который выше, чем фактический размер, почему контейнер не автоматически вычисляет длину?
, например,
String s = "hello";
byte[] b = s.getBytes();
response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.
Когда я нажму на сервлете, нужно загрузку на полминут, это из-за заголовка длины содержимого ..?
Что такое необходимость в таком способе?Почему контейнер не может быть сделан для расчета длины ответа самого себя?
Решение
Если вы хотите вернуть большое содержимое, часто не практично загружать полный ответ и отправить его одновременно, но вместо этого загружать и отправлять его в куски.Поскольку длина отправляется как часть начала ответа. Нет никакого способа для контейнера для дальнейшего изменения его.
В этом случае вы сообщите контейнеру, что ваш ответ имеет 100 байтов, вы отправляете первые 5 байтов (которые вызывают заголовок «Длина содержимого: 100», чтобы также отправлять), поэтому теперь получатель будет ожидать еще 95 байтов,
Теперь, с другой стороны, скажем, ваш контент был 10 ГБ, вы не захотите сначала загрузить все это в память, чтобы контейнер рассчитал бы размер.