Chunked-кодирование и заголовок длины содержимого - PullRequest
22 голосов
/ 22 июля 2010

Можно ли установить заголовок длины содержимого, а также использовать кодирование передачи по частям?и решает ли это проблему незнания длины ответа на стороне клиента при использовании chunked?

сценарий, о котором я думаю, это когда у вас есть большой файл для передачи, и вопределить его размер, но он слишком велик для полного буферизации.(Если вы не используете chunked, тогда весь ответ должен сначала буферизироваться? Верно ??)

спасибо.

Ответы [ 3 ]

26 голосов
/ 22 июля 2010

1) Нет: «Сообщения НЕ ДОЛЖНЫ включать в себя как поле заголовка Content-Length, так и кодирование передачи без идентификации. Если сообщение действительно включает кодирование передачи без идентификации, Content-Length ДОЛЖЕН игнорироваться». ( RFC 2616, раздел 4.4 )

2) И нет, вы можете использовать Content-Length и stream; протокол не ограничивает работу вашей реализации.

9 голосов
/ 22 августа 2012

Ну, вы всегда можете отправить заголовок с указанием размера файла.Что-то вроде response.addHeader("File-Size","size of the file");
И игнорируйте заголовок Content-Length.

Клиентская реализация должна быть настроена, чтобы прочитать это значение, но эй, вы можете достичь обеих целей, которые вы хотите:)

0 голосов
/ 03 апреля 2018

Вы должны использовать либо Content-Length, либо chunking, но не оба.

Если вы заранее знаете длину, вы можете использовать Content-Length вместо чанкинга, даже если вы генерируете контент «на лету» и никогда не размещаете все это сразу в своем буфере.

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

...