Pular para conteúdo

trim: Filtro que remove espaços em branco e comentários de respostas HTML

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-trim
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-trim

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_trim_filter_module.so;

Este documento descreve o nginx-module-trim v0.1.0 lançado em 27 de junho de 2024.


O módulo ngx_http_trim_filter é um filtro que modifica uma resposta removendo espaços em branco desnecessários (espaços, tabs, quebras de linha) e comentários de HTML (incluindo javascript e css inline). O módulo Trim analisa HTML com uma máquina de estados.

Exemplo de Configuração

location / {
    trim on;
    trim_js on;
    trim_css on;
}

Diretivas

trim on | off

Padrão: trim off

Contexto: http, server, location

Ativa ou desativa o módulo trim para HTML puro.
Este módulo manterá alguns conteúdos inalterados, caso estejam encapsulados pelas tags pre, textarea, script e style, assim como comentários IE/SSI/ESI.
O valor do parâmetro pode conter variáveis.
Exemplo:

set $flag "off";
if ($condition) {
    set $flag "on";
}
trim $flag;


trim_js on | off

Padrão: trim_js off

Contexto: http, server, location

Ativa ou desativa o módulo trim para javascript inline.
O valor do parâmetro também pode conter variáveis.

trim_css on | off

Padrão: trim_css off

Contexto: http, server, location

Ativa ou desativa o módulo trim para css inline.
O valor do parâmetro também pode conter variáveis.

trim_types MIME types

Padrão: trim_types: text/html

Contexto: http, server, location

Ativa o módulo trim para os tipos MIME especificados além de "text/html". Respostas com o tipo “text/html” são sempre processadas.

Debug

O módulo Trim será desativado se a requisição recebida tiver o parâmetro http_trim=off na URL.
ex.: http://www.xxx.com/index.html?http_trim=off

Exemplo

original:

<!DOCTYPE html>
<textarea  >
   trim
        module
</textarea  >
<!--remove all-->
<!--[if IE]> trim module <![endif]-->
<!--[if !IE ]>--> trim module  <!--<![endif]-->
<!--# ssi-->
<!--esi-->
<pre    style  =
    "color:   blue"  >Welcome    to    nginx!</pre  >
<script type="text/javascript">
/***  muitl comment 
                   ***/
//// single comment
str.replace(/     /,"hello");
</script>
<style   type="text/css"  >
/*** css comment
                 ! ***/
body
{
  font-size:  20px ;
  line-height: 150% ;
}
</style>

resultado:

<!DOCTYPE html>
<textarea>
   trim  
        module
</textarea>
<!--[if IE]> trim module <![endif]-->
<!--[if !IE ]>--> trim module  <!--<![endif]-->
<!--# ssi-->
<!--esi-->
<pre style="color:   blue">Welcome    to    nginx!</pre>
<script type="text/javascript">str.replace(/     /,"hello");</script>
<style type="text/css">body{font-size:20px;line-height:150%;}</style>

Regra de Trim

Html

Espaços em branco
  • Remover '\r'.
  • Substituir '\t' por espaço.
  • Substituir múltiplos espaços por um único espaço.
  • Substituir múltiplas '\n' por uma única '\n'.
  • Substituir múltiplas '\n' e '\t' em tags por um único espaço.
  • Não trimar strings entre aspas em tags.
  • Não trimar os conteúdos encapsulados pelas tags pre, textarea, script e style.
Comentário
  • Remover comentários HTML (<!-- -->).
  • Não trimar comentários IE/SSI/ESI.
    Comentário IE: <!--[if <![endif]-->
    Comentário SSI: <!--# -->
    Comentário ESI: <!--esi -->

Javascript

Conteúdos encapsulados por <script type="text/javascript"> ou <script> serão identificados como javascript.

Espaços em branco
  • Remover '\r'.
  • Remover '\t', '\n' e espaço que estão atrás de '(', ',', '=', ':', '[', '!', '&', '|', '?', ';', '>', '~', '*', '{'.
  • Substituir múltiplos espaços por um único espaço.
  • Não trimar strings entre aspas e literais de expressões regulares.
Comentário
  • Remover comentário único. //
  • Remover comentário múltiplo. /* */

Css

Conteúdos encapsulados por <style type="text/css"> ou <style> serão identificados como css.

Espaços em branco
  • Remover '\r'.
  • Remover '\t', '\n' e espaço que estão ao redor de ';', '>', '{', '}', ':', ','.
  • Substituir múltiplas '\n' e espaços por um único espaço.
  • Não trimar strings entre aspas.
Comentário
  • Remover comentários css (/* */).
  • Não remover seletores filhos e comentários de hack IE5/Mac.
    Hack de seletor filho: html>/**/body p{color:blue}
    Hack IE5/Mac: /*\*/.selector{color:khaki}/**/

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub nginx-module-trim.