mod_gzip · 4 min read · Sep 21, 2025

mod_gzip - servindo conteúdo comprimido pelo servidor web Apache - Página 8

Autor: Michael Schröpl

Este documento descreve algumas possíveis melhorias funcionais que, esperançosamente, poderiam ser implementadas na versão atual 1.3.26.1a do mod_gzip sem muito esforço e melhorar a usabilidade deste módulo.

Classe de log e valor da regra de filtro decisiva

A decisão sobre se o conteúdo de um documento se qualifica para compressão pelo mod_gzip é finalmente feita durante a avaliação das regras de filtro definidas pelas diretivas mod_gzip_item_include e mod_gzip_item_exclude, que são verificadas pela função mod_gzip_validate1.

Mas essa função é invocada em nada menos que cinco posições dentro do código-fonte, cada vez com configurações de parâmetros diferentes para partes específicas das classes de regras a serem verificadas naquele momento. Em alguns desses casos, é claro a partir da configuração de parâmetros restrita qual classe de regra deve ter levado ao resultado específico (mas não qual valor de regra!), em outros casos (como o teste simultâneo de todas as regras das classes file, uri, mime e handler) nem mesmo a classe da regra decisiva é clara (porque mod_gzip_validate1 retorna um valor de resultado tão não específico para o chamador que este não consegue entender exatamente o que aconteceu - em alguns casos, até mesmo erros internos são codificados como uma decisão devido a uma regra de exclusão). Nesses casos, nem mesmo uma avaliação razoável do código de status do mod_gzip é possível.

Mas a definição de um conjunto de regras apropriado é o passo mais importante durante todo o procedimento de configuração do mod_gzip (e atualmente ainda bastante complicado). Qualquer informação sobre qual das regras definidas decidiu em quais casos se o conteúdo de um documento deveria ser comprimido seria útil para o usuário em muitos casos.

Por outro lado, o mod_gzip já suporta a transparência de processamento após o manuseio bem-sucedido de um documento, definindo algumas variáveis que podem ser usadas nos formatos de log do Apache (o status de processamento, os tamanhos dos documentos antes e depois da compressão, bem como a economia de volume em porcentagem - a última erroneamente sempre arredondada para cima). De acordo com isso, o mod_gzip poderia (justo no momento em que a decisão sobre a compressão do conteúdo do documento foi tomada) facilmente armazenar a classe e o conteúdo da regra decisiva em duas variáveis de log adicionais que seriam então acessadas dentro de um formato de log através dos nomes mod_gzip_rule_class e mod_gzip_rule_content.

Nível de compressão gzip configurável

Atualmente, o mod_gzip usa o nível de compressão gzip 6. Isso é codificado de forma rígida pela atribuição gz1->level = 6 dentro da função gz1_init.

Quanto maior o nível de compressão (gzip permite valores entre 1 e 9), melhor o efeito de compressão, mas maior também o consumo de tempo da CPU. Ao adaptar esse nível de compressão, um usuário poderia resolver a troca entre carga da CPU e economia de largura de banda de acordo com suas próprias necessidades. Experimentos próprios mostraram que o nível 3 já o leva perto do efeito do nível de compressão 6 - pelo menos a escolha entre esses dois valores deve ser deixada para o usuário.

Assim, seria razoável ter esse nível de compressão configurável, oferecendo outra diretiva mod_gzip_compression_level.

Uma análise mais detalhada por Christian Kruse levou à conclusão de que o código de compressão de Kevin Kiley para o mod_gzip não parece suportar todos os 9 níveis de compressão para

gzip

mas basicamente apenas aqueles necessários para o nível 6 (embora a estrutura do programa tenha sido projetada para implementar todos os 9 níveis mais tarde). Portanto, simplesmente mudar a constante mencionada não é suficiente; de fato, o mod_gzip não é mais utilizável após esse tipo de modificação.

Expressões booleanas nas diretivas include / exclude

O mod_gzip 1.3.19.1a usa - causado pela sua forma de ser incorporado dentro do manuseio de solicitações do Apache - um procedimento de filtro complexo de dois níveis para decidir se o resultado de uma solicitação deve ser comprimido. (Em uma arquitetura modificada do Apache 2.0, uma forma mais simples de incorporação pode ser possível.)

Uma solicitação atualmente será aceita pelo mod_gzip exatamente se durante cada uma das duas fases de decisão pelo menos uma regra include for acionada, mas nenhuma regra exclude. Como tais regras permitem expressões regulares como valores de parâmetro, isso torna condições poderosas disponíveis.

No entanto, todas as regras são independentes umas das outras; as diretivas atualmente disponíveis não permitem que o usuário expresse que tipos MIME distintos sejam entregues apenas em forma comprimida para navegadores distintos - a conexão E entre várias regras está faltando.

Parece haver apenas raras ocasiões em que isso seria realmente útil - até agora, seria especialmente necessário ajustar finamente as regras de filtro para lidar com todos os bugs do Netscape 4, além de excluir totalmente esse navegador da compressão. Com o passar do tempo (e a melhoria da conformidade com os padrões dos navegadores), esse recurso pode se tornar obsoleto.

Servir cabeçalho HTTP idêntico para solicitações GET e HEAD

De acordo com o RFC 2616, para uma solicitação usando o método HEAD, uma implementação compatível com HTTP/1.1 deveria servir cabeçalhos HTTP idênticos àqueles que teriam sido servidos para uma solicitação pelo mesmo recurso usando o método GET.

No caso do mod_gzip, isso significaria que mesmo para uma solicitação HEAD, o conteúdo teria que ser comprimido (ou lido, no caso de um arquivo pré-comprimido estaticamente) apenas para poder gerar um cabeçalho HTTP Content-Length correto.

Até agora, o mod_gzip não lida com esse caso (extremamente raro) de aplicação (provavelmente devido a considerações de desempenho); no entanto, de acordo com o RFC 2119, isso pode fazer com que o comportamento do módulo seja, portanto, apenas condicionalmente compatível com HTTP/1.1, porque deve haver uma razão válida para não suportar um requisito recomendado.

Localização original deste documento:

http://www.schroepl.net/projekte/mod_gzip/enhancements.htm

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.