Problema de resposta do mod_ext_filter e mod_deflate do Apache

1

Eu tenho um mod_ext_filter para substituir a URL da imagem estática e mod_deflate para compactar a web.

Se eu usar este dois módulo separado e tudo funcionar bem.

(1. Substitua o conteúdo ok e não compacte 2. Compacte o conteúdo, mas não substitua o URL)

Mas se eu usar ambos os módulos, então eu tenho lixo e o cabeçalho de resposta não tem gzip, mas tem Transfer-Encoding: chunked.

Alguém pode me ajudar sobre isso? qual o caminho que devo tentar resolver onde? Obrigado.

    
por BigJ 30.06.2011 / 18:38

2 respostas

2

Eu corri através disso eu mesmo. Nenhuma combinação de INFLATE, DEFLATE e meu filtro personalizado funcionaria. Parecia sempre executar o gzip DEFLATE antes de passar para o filtro do meu cliente.

Estou usando o Apache 2.2.2. Então, essencialmente, quando uma resposta codificada por gzip foi recebida (modo de proxy reverso) e passada para o meu filtro personalizado phpFilter :

ExtFilterDefine phpFilter mode=output \
cmd="/path/my_php_filter.php"

Isso funciona muito bem (recebo boas coisas descompactadas, independentemente do tipo de conteúdo):

SetOutputFilter INFLATE;DEFLATE

Isso também funciona (vejo coisas compactadas agradáveis ou coisas boas não compactadas para respostas não-gzip como JSON ou HTML):

SetOutputFilter phpFilter

Mas isso não funciona! o STDIN para o meu script php sempre seria distorcido quando o Content-Type era gzip.

SetOutputFilter INFLATE;phpFilter;DEFLATE

Depois de uma tonelada de googling e um pouco de sorte, isso acabou funcionando para mim. Eu não sei porque é necessário, mas adicionar proxy-html na cadeia de filtros parece forçar meu filtro personalizado a executar antes DEFLATE.

SetOutputFilter INFLATE;phpFilter;proxy-html;DEFLATE

Eu sei que estou respondendo a essa questão 2 anos tarde demais, mas espero que isso economize um dia ou dois de dor de cabeça para a próxima pessoa.

    
por 07.06.2013 / 04:22
0

Eu também acabei de encontrar isso:

então talvez adicionar ftype = N > 21 também funcione

# 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>
    
por 10.06.2013 / 20:53