Предотвратить Apache от разбиения GZIP-контента - PullRequest
3 голосов
/ 27 декабря 2010

При использовании mod_deflate в Apache2, Apache будет разбивать фрагменты сжатого содержимого, устанавливая заголовок Transfer-encoding: chunked. Хотя это приводит к сокращению времени загрузки, я не могу отобразить индикатор выполнения.

Если я сам обработаю сжатие в PHP, я могу сначала сжать его полностью и установить заголовок Content-length, чтобы я мог отображать индикатор выполнения для пользователя.

Есть ли какая-либо настройка, которая изменила бы поведение Apache по умолчанию, и чтобы Apache установил заголовок Content-length вместо разбиения ответа, чтобы мне не пришлось самостоятельно обрабатывать сжатие?

1 Ответ

1 голос
/ 28 декабря 2010

Вы можете поиграть с sendBufferSize , чтобы получить достаточно большое значение, чтобы вместить ваш ответ в один блок.

Тогда chunked content является частью протокола HTTP / 1.1, вы можете форсировать HTTP / 1.0-ответ (поэтому не chunked: « Сервер НЕ ДОЛЖЕН отправлять кодировки передачи на HTTP / 1.0 client. ”), установив force-response-1.0 в вашей конфигурации apache. Но PHP нарушает эти настройки , это давно известная ошибка PHP, есть обходной путь .

Мы могли бы попытаться изменить запрос на стороне клиента с помощью заголовка, предотвращающего порцию контента, но w3c говорит: « Все приложения HTTP / 1.1 ДОЛЖНЫ иметь возможность принимать и декодировать« порцию »кодирования передачи", поэтому я не думаю, что есть какой-либо заголовок, такой как« Принять », и такой, который может помешать серверу разделить контент. Однако вы можете попытаться установить свой запрос в HTTP / 1.0, это на самом деле не заголовок запроса, это первая строка, это должно быть возможно с jQuery, конечно.

И наконец, в HTTP / 1.0 не хватает одной большой вещи: заголовки «host» не обязательны, проверьте, что ваши запросы в HTTP / 1.0 по-прежнему используют заголовок «host», если вы работаете с виртуальными хостами на основе имен.

edit: Используя технику, процитированную в обходном пути, вы можете увидеть, что вы можете настроить enache Apache в коде PHP. Это можно использовать для принудительного включения режима 1.0 только для вашего специального содержимого в формате gzip, и вы должны использовать его, чтобы предотвратить заполнение приложения в HTTP / 1.0 (или использовать режим запроса, чтобы установить HTTP / 1.0 для ваших запросов gzip).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...