У меня есть mod_ext_filter для замены URL-адреса статического изображения и mod_deflate для сжатия сети.
Если я использую эти два модуля отдельно, и все будет работать нормально.
(1. Заменить контент в порядке, без сжатия 2. Сжать контент, но без замены URL)
Но если я использую оба модуля, то получаю мусор, а заголовок ответа не имеет gzip, но имеет фрагменты Transfer-Encoding:.
Кто-нибудь может мне с этим помочь? каким путем я должен попытаться решить где? Спасибо.
Я сам с этим сталкивался. Никакая комбинация INFLATE, DEFLATE и моего настраиваемого фильтра не будет работать. Казалось, что он всегда выполняет gzip DEFLATE перед передачей моему клиентскому фильтру.
Я использую Apache 2.2.2. По сути, когда был получен ответ в кодировке gzip (режим обратного прокси) и передан моему настраиваемому фильтру phpFilter
:
ExtFilterDefine phpFilter mode=output \
cmd="/path/my_php_filter.php"
Это отлично работает (я получаю приятный распакованный материал, независимо от Content-Type):
SetOutputFilter INFLATE;DEFLATE
Это также работает (я вижу приятные сжатые файлы или приятные несжатые файлы для ответов без сжатия, таких как JSON или HTML):
SetOutputFilter phpFilter
Но это не работает! STDIN для моего php-скрипта всегда будет искажен, если Content-Type был gzip.
SetOutputFilter INFLATE;phpFilter;DEFLATE
После ТОННЫ поисков в Google и небольшой удачи, это сработало для меня. Я не знаю, почему это необходимо, но добавление proxy-html в цепочку фильтров, похоже, заставляет мой настраиваемый фильтр выполнять перед ВЫПУСКАТЬ.
SetOutputFilter INFLATE;phpFilter;proxy-html;DEFLATE
Я знаю, что отвечаю на этот вопрос с опозданием на два года, но, надеюсь, это избавит следующего человека от головной боли на день или два.
Я тоже только что наткнулся на это:
так что, возможно, добавление ftype = N> 21 также будет работать
# Trace the data read and written by mod_deflate
# for a particular client (IP 192.168.1.31)
# experiencing compression problems.
# This filter will trace what goes into mod_deflate.
ExtFilterDefine tracebefore \
cmd="/bin/tracefilter.pl /tmp/tracebefore" \
EnableEnv=trace_this_client
# This filter will trace what goes after mod_deflate.
# Note that without the ftype parameter, the default
# filter type of AP_FTYPE_RESOURCE would cause the
# filter to be placed *before* mod_deflate in the filter
# chain. Giving it a numeric value slightly higher than
# AP_FTYPE_CONTENT_SET will ensure that it is placed
# after mod_deflate.
ExtFilterDefine traceafter \
cmd="/bin/tracefilter.pl /tmp/traceafter" \
EnableEnv=trace_this_client ftype=21
<Directory /usr/local/docs>
SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
SetOutputFilter tracebefore;deflate;traceafter
</Directory>