Кодирование по частям и заголовок длины содержимого

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

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

благодаря.


person p00ya00    schedule 21.07.2010    source источник
comment
Если бы вы могли упомянуть какие-либо ссылки на RFC или что-то в этом роде, было бы здорово.   -  person p00ya00    schedule 22.07.2010


Ответы (3)


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

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

person Julian Reschke    schedule 21.07.2010
comment
Я надеюсь, что фрагментированное кодирование передачи является примером для потока; Вы упомянули здесь, не так ли? он также может включать запросы диапазона. я прав? - person Jayapal Chandran; 01.09.2011

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

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

person Gyan    schedule 22.08.2012
comment
Простые решения - лучшие :-) - person EZDsIt; 20.10.2016
comment
По соглашению в любом нестандартном заголовке используется префикс X-. Прокси-сервер HTTP вполне может решить отбросить ваш нестандартный не-X-заголовок. - person MSalters; 06.04.2017
comment
Спасибо, MSalters, только что получил ссылку на подобное руководство в другом месте, оцените его. - person Gyan; 06.04.2017
comment
По состоянию на 5 лет назад префикс X- в нестандартных заголовках осуждается, не рекомендуется и не считается передовой практикой. Просто используйте file-size в качестве имени заголовка, все в порядке. tools.ietf.org/html/rfc6648 - person isaacs; 14.09.2017

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

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

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

person Bruce    schedule 03.04.2018
comment
К сожалению, это бесполезно, если вам нужно загрузить большой файл с информацией о ходе выполнения. - person Gringo Suave; 16.08.2018
comment
В спецификации только сказано, что Content-Length следует игнорировать, если присутствует Transfer-Encoding, не сказано, что вы не можете его отправить, Base на экспериментах с хромом, Chrome будет рассматривать Content-Length как подсказку, если она есть, и отображать индикатор выполнения загрузки файлов. Если я отправляю контент неправильной длины, который слишком мал, он отображает индикатор выполнения, пока загрузка не превысит указанную длину, затем переключается на индикатор выполнения потоковой передачи и по-прежнему правильно завершает загрузку. - person Glen Fletcher; 16.10.2019
comment
Это также сработало, когда я установил слишком большую Content-Length, загрузка остановилась в соответствии с правилами для Chunking. Исходя из этого, я бы использовал фрагменты для больших файлов и все равно установил Content-Length, единственный случай, когда это может быть проблемой, - это если клиент не соответствует стандарту и дает приоритеты Content-Length над Transfer-Encoding, поэтому я предполагаю, что это не должно Это не проблема с любыми основными веб-браузерами (по статистике использования). IE может быть проблемой, но по памяти это только около 2% веб-пользователей в наши дни, поэтому меня это не волнует. - person Glen Fletcher; 16.10.2019