HandyCache форум

Главная категория => Общие вопросы => Тема начата: KPu3uC B Poccuu от 10 февраля 2021, 12:26:23



Название: Побороть добавление HC `Transfer-Encoding: chunked` при указанном размере тела
Отправлено: KPu3uC B Poccuu от 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.


Название: Re: Побороть добавление HC `Transfer-Encoding: chunked` при указанном размере тела
Отправлено: KPu3uC B Poccuu от 20 марта 2021, 09:16:22
Меня начинает уже бесить данное поведение программы, ну вот скажите, пожалуйста, нафига оно вообще было добавлено? Никакой пользы при уже известном размере тела ответа нет, так зачем всё так усложнять? Напомню, что кодировка служит только для случаев, когда размер тела неизвестен заранее, так что данное поведение HC не что иное, как серьёзная ошибка.

А вообще, куда все подвались? Писал даже автору программы, но ответа так и не получил.


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


Название: Re: Побороть добавление HC `Transfer-Encoding: chunked` при указанном размере тела
Отправлено: KPu3uC B Poccuu от 20 марта 2021, 11:45:49
Дальше-больше: запрос ресурса через указание диапазона байтов также должен быть освобождён от данной гадости. Я вообще не понимаю, как могут совмещаться в одном запросе выдача частями при указании диапазона, ведь при этом тоже совершенно точно известны размеры тела! Уже несколько клиентов у меня подавились ответами HC в таком случае.