Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: Побороть добавление HC `Transfer-Encoding: chunked` при указанном размере тела  (Прочитано 361 раз)
0 Пользователей и 1 Гость смотрят эту тему.
KPu3uC B Poccuu
Пользователь
**

Репутация: +0/-1
Offline Offline

Сообщений: 68


WWW
« : 10 февраля 2021, 12:26:23 »

Оказывается, проблема давняя: http://handycache.ru/component/option,com_smf/Itemid,10/topic,7366.msg48098. Я просто не могу понять, почему вообще HC делает это, причём я не могу установить закономерность, по которой это происходит. Это приводит к серьёзной деградации производительности, в частности при отсутствующей информации о длине тела ответа многие приложения не могут использовать многопоточную закачку, а также похоже, что сама по себе данная кодировка работает медленней, так как я замерил закачку ресурсов через HC с данным заголовком, добавленным им самим, и тех, что были избавлены от данного проклятия, даже будучи большего размера, закачиваются гораздо быстрее.

Невозможно восстановить размер тела, если HC удалит соотв. заголовок из-за сложностей обработки `Accept-Encoding`, `Transfer-Encoding` и `Content-Encoding`. Также HC допускает ошибку, если попытаться указать самому в расширении `Transfer-Encoding`, HC создаст ещё один такой заголовок для кодировки `chunked`, насколько мне известно, данный заголовок может быть в единственном экземпляре и не более, а значения, если их более 1-го, должны разделяться запятой с пробелом. В частности, я не могу найти способ восстановить размер сжатого (`gzip`) ресурса при выдаче из кэша, так как в обработчик события `BeforeAnswerHeaderSend` -- последний момент, когда ещё можно изменить заголовки -- приходит размер сжатого ресурса, и при выдаче его клиенту, не ожидающему сжатие `gzip`, он, разумеется, не сможет принять такой ответ.

Прошу дать возможность так или иначе отключить или обойти данное поведение HC.
Сообщить модератору   Записан
KPu3uC B Poccuu
Пользователь
**

Репутация: +0/-1
Offline Offline

Сообщений: 68


WWW
« Ответ #1 : 20 марта 2021, 09:16:22 »

Меня начинает уже бесить данное поведение программы, ну вот скажите, пожалуйста, нафига оно вообще было добавлено? Никакой пользы при уже известном размере тела ответа нет, так зачем всё так усложнять? Напомню, что кодировка служит только для случаев, когда размер тела неизвестен заранее, так что данное поведение HC не что иное, как серьёзная ошибка.

А вообще, куда все подвались? Писал даже автору программы, но ответа так и не получил.
Сообщить модератору   Записан
KPu3uC B Poccuu
Пользователь
**

Репутация: +0/-1
Offline Offline

Сообщений: 68


WWW
« Ответ #2 : 20 марта 2021, 10:34:00 »

Обнаружил только что, что HandyCache идёт ещё дальше вразрез со стандартами, он настаивает на включении заголовка `Transfer-Encoding: chunked` для запросов версии 1.0, хотя только версия 1.1 протокола HTTP описывает его и указывает, что любой клиент, использующий эту версию, ОБЯЗАН поддерживать данный метод передачи (то бишь по частям).
Сообщить модератору   Записан
KPu3uC B Poccuu
Пользователь
**

Репутация: +0/-1
Offline Offline

Сообщений: 68


WWW
« Ответ #3 : 20 марта 2021, 11:45:49 »

Дальше-больше: запрос ресурса через указание диапазона байтов также должен быть освобождён от данной гадости. Я вообще не понимаю, как могут совмещаться в одном запросе выдача частями при указании диапазона, ведь при этом тоже совершенно точно известны размеры тела! Уже несколько клиентов у меня подавились ответами HC в таком случае.
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: