Чанк-кодировка передачи - поведение браузера

17

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

Я ожидал, что браузер обновит страницу на каждом полученном фрагменте, вместо этого он ждет, пока все куски не будут получены, а затем отобразит их все. Это ожидаемое поведение?

Я ожидал увидеть каждый кусок, показанный сразу после его получения. При использовании curl каждый фрагмент отображается сразу после его получения. Почему такое же не происходит с GUI-браузерами? Используют ли они какую-то буферизацию / кеш?

Я устанавливаю Cache-Control в no-cache , поэтому не уверен, что это кэш.

    
задан Dani El 26.11.2012 в 03:31
источник
  • Какие браузеры вы ищете? Как правило, браузеры будут делать инкрементный рендеринг, но они могут внутренне буферизовать вещи немного, потому что ретрансляторы дороги ... –  Boris Zbarsky 26.11.2012 в 03:57
  • Какой тип данных вы отправляете в куски? Это просто HTML или вы отправляете данные скрипта? –  qqx 26.11.2012 в 07:56
  • Я отправляю текст / html. Пробовал Firefox и Chrome. Оба ждут все куски, которые нужно получить. –  Dani El 26.11.2012 в 09:40
  • См. также (более новый) stackoverflow.com/q/16909227/179081 –  Lyndon White 21.02.2018 в 02:37

2 ответа

13

В браузерах afaik нужна некоторая полезная нагрузка для начала обработки кусков по мере их получения.
Curl - это, конечно, исключение.

Попробуйте отправить около 1 Кбайт произвольных данных перед первым куском.

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

    
ответ дан user904990 26.11.2012 в 10:00
  • Yay !!! вот и все! отлично работает в Firefox, Chrome, Safari, даже Opera! Большое спасибо. –  Dani El 26.11.2012 в 10:27
  • Спасибо, человек, ты спас мой день! –  Jekis 28.03.2014 в 13:02
  • 1KiB действительно хорошее общее значение, более подробную информацию смотрите здесь: stackoverflow.com/q/16909227/1534459 –  bodo 26.05.2015 в 10:13
  • Браузеры AFAIK собирают только указанные 1KB данных, если они не получили заголовок содержимого. Им нужны данные, чтобы получить обоснованное предположение о том, что они хотят получить. Кроме того, также может возникнуть проблема с антивирусным программным обеспечением, как я описал здесь: stackoverflow.com/a/41760573/1004651 –  Matthias 20.01.2017 в 11:11
  • , похоже, не работает на ipad в сафари. : / –  cnst 05.02.2017 в 00:43
0

Браузер может обрабатывать и отображать данные в том виде, в каком они отправляются, или нет. Независимо от того, отображает ли браузер данные ответа, будет ли функция структуры данных и какой буферизацией она использует. например Прежде чем браузер сможет отобразить изображение, он должен иметь документ (или достаточно документа), таблицу стилей и т. Д.

Chunking в основном полезен, когда длина ресурса неизвестна в момент генерации ответа ресурса («Content-Length» не может быть включен в заголовки ответов), и сервер не хочет закрывать соединение после передачи ресурса.

    
ответ дан C Pratt 12.02.2016 в 21:46