Назад | Перейти на главную страницу

Проблема с ответом Apache mod_ext_filter и mod_deflate

У меня есть 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>