Кодирование передачи: фрагментированное

Я пытался понять больше о Transfer-Encoding:chunked. сослался на некоторые статьи: http://zoompf.com/blog/2012/05/too-chunky и Transfer-Encoding: фрагментированный заголовок в PHP.

Я все еще не получил очень четкого изображения. Я понимаю, что установка этой кодировки позволяет серверу устанавливать контент в браузере по частям и вызывать частичную визуализацию контента в то время, когда веб-сайт становится отзывчивым.

Если у меня есть веб-приложение, которое обслуживает динамический контент (например, веб-приложение на основе JSF), размещенное на IBM WAS, большинство веб-страниц предназначены для серверного статического контента с большим количеством файлов CSS и JS + динамического контента. Как я могу настроить кодировку передачи для своих страниц? Или другими словами:

  • Как вы решаете, на какой странице будет 'Transfer-Encoding: chunked' и как установить его для этой страницы?

Ваш личный опыт, безусловно, будет ценным для моего понимания.


person Vicky    schedule 11.11.2013    source источник


Ответы (2)


Transfer-Encoding: chunked не требуется для прогрессивного рендеринга. Однако это необходимо, когда общая длина содержимого неизвестна до отправки первых байтов.

person Julian Reschke    schedule 11.11.2013
comment
Можете ли вы включить это программно для своих веб-страниц? - person Vicky; 13.11.2013
comment
Это зависит от вашего веб-сервера. Обычно он используется автоматически, когда вы начинаете отправлять данные, не зная длины. - person Julian Reschke; 13.11.2013

Когда серверу необходимо отправить большой объем данных, сервер использует фрагментированное кодирование, потому что он точно не знает, какого размера (длины) данные будут. В терминах HTTP, когда сервер отправляет ответ, заголовок Content-Length сервером опускается. Вместо этого сервер записывает длину текущего фрагмента в шестнадцатеричном формате, за которым следует \ r \ n, а затем фрагмент, за которым следует \ r \ n (содержимое начинается с размера фрагмента в шестнадцатеричном формате, за которым следует фрагмент)

Эта функция может использоваться для прогрессивного рендеринга; однако серверу необходимо как можно больше очищать данные, чтобы клиент мог постепенно отображать контент (в случае html, css и т. д.)

Эта функция часто используется, когда сервер отправляет данные клиенту в больших объемах - обычно в большом размере (мега / гига).

Документация Mozilla

person webjockey    schedule 13.07.2017
comment
обычно в гигах - должно быть мега, во всяком случае. ;) Но это даже не обязательно о размере: это столько же о времени, поэтому клиент может продолжить работу с полученными порциями, даже не зная точного размера всего ответа. - person Sz.; 27.03.2018
comment
@webjockey, мне интересно, нужно ли клиенту отправлять данные на сервер кусками. Похоже, что разбиение на части выполняется только сервером. - person hipeople321; 02.09.2020
comment
веб-браузеры имеют встроенный алгоритм декодирования фрагментов, как указано в tools.ietf.org/ html / rfc7230 # section-3.3.1. Я не знаю, реализуют ли веб-серверы такой алгоритм. В качестве альтернативы вы можете использовать mutipart / form-data с настраиваемым именем заголовка границы, но вам нужно будет выполнить свою собственную реализацию того, как сохранить большой файл, который получен в кусках, разделенных именем настраиваемого заголовка границы. - person webjockey; 02.09.2020