Вопрос

Когда метод setContentLength используется для установки длины отклика с более высоким размером, который выше, чем фактический размер, почему контейнер не автоматически вычисляет длину?

, например,

String s = "hello";
byte[] b = s.getBytes();

response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
.

Когда я нажму на сервлете, нужно загрузку на полминут, это из-за заголовка длины содержимого ..?

Что такое необходимость в таком способе?Почему контейнер не может быть сделан для расчета длины ответа самого себя?

Это было полезно?

Решение

Если вы хотите вернуть большое содержимое, часто не практично загружать полный ответ и отправить его одновременно, но вместо этого загружать и отправлять его в куски.Поскольку длина отправляется как часть начала ответа. Нет никакого способа для контейнера для дальнейшего изменения его.

В этом случае вы сообщите контейнеру, что ваш ответ имеет 100 байтов, вы отправляете первые 5 байтов (которые вызывают заголовок «Длина содержимого: 100», чтобы также отправлять), поэтому теперь получатель будет ожидать еще 95 байтов,

Теперь, с другой стороны, скажем, ваш контент был 10 ГБ, вы не захотите сначала загрузить все это в память, чтобы контейнер рассчитал бы размер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top