Saltar a contenido

trim: Filtro que elimina espacios en blanco y comentarios de las respuestas HTML

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y 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

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_trim_filter_module.so;

Este documento describe nginx-module-trim v0.1.0 lanzado el 27 de junio de 2024.


El módulo ngx_http_trim_filter es un filtro que modifica una respuesta eliminando espacios en blanco innecesarios (espacios, tabulaciones, saltos de línea) y comentarios de HTML (incluyendo javascript y css en línea). El módulo Trim analiza HTML con una máquina de estados.

Ejemplo de Configuración

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

Directivas

trim on | off

Predeterminado: trim off

Contexto: http, server, location

Habilita o deshabilita el módulo trim para HTML puro.
Este módulo mantendrá algunos contenidos sin cambios, en caso de que estén encerrados por las etiquetas pre, textarea, script y style, así como comentarios IE/SSI/ESI.
El valor del parámetro puede contener variables.
Ejemplo:

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


trim_js on | off

Predeterminado: trim_js off

Contexto: http, server, location

Habilita o deshabilita el módulo trim para javascript en línea.
El valor del parámetro también puede contener variables.

trim_css on | off

Predeterminado: trim_css off

Contexto: http, server, location

Habilita o deshabilita el módulo trim para css en línea.
El valor del parámetro también puede contener variables.

trim_types MIME types

Predeterminado: trim_types: text/html

Contexto: http, server, location

Habilita el módulo trim para los tipos MIME especificados además de "text/html". Las respuestas con el tipo “text/html” siempre son procesadas.

Depuración

El módulo Trim se desactivará si la solicitud entrante tiene el parámetro http_trim=off en la URL.
p. ej. http://www.xxx.com/index.html?http_trim=off

Ejemplo

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>

Regla de Trim

Html

Espacios en blanco
  • Eliminar '\r'.
  • Reemplazar '\t' con espacio.
  • Reemplazar múltiples espacios con un solo espacio.
  • Reemplazar múltiples '\n' con un solo '\n'.
  • Reemplazar múltiples '\n' y '\t' en la etiqueta con un solo espacio.
  • No recortar cadenas entre comillas en la etiqueta.
  • No recortar los contenidos encerrados por las etiquetas pre, textarea, script y style.
Comentario
  • Eliminar comentarios HTML (<!-- -->).
  • No recortar comentarios IE/SSI/ESI.
    Comentario IE: <!--[if <![endif]-->
    Comentario SSI: <!--# -->
    Comentario ESI: <!--esi -->

Javascript

Los contenidos encerrados por <script type="text/javascript"> o <script> serán identificados como javascript.

Espacios en blanco
  • Eliminar '\r'.
  • Eliminar '\t', '\n' y espacio que están detrás de '(', ',', '=', ':', '[', '!', '&', '|', '?', ';', '>', '~', '*', '{'.
  • Reemplazar múltiples espacios con un solo espacio.
  • No recortar cadenas entre comillas y literales de expresiones regulares.
Comentario
  • Eliminar comentario simple. //
  • Eliminar comentario múltiple. /* */

Css

Los contenidos encerrados por <style type="text/css"> o <style> serán identificados como css.

Espacios en blanco
  • Eliminar '\r'.
  • Eliminar '\t', '\n' y espacio que están alrededor de ';', '>', '{', '}', ':', ','.
  • Reemplazar múltiples '\n' y espacios con un solo espacio.
  • No recortar cadenas entre comillas.
Comentario
  • Eliminar comentario css (/* */).
  • No eliminar selectores hijos y comentarios de hack de IE5/Mac.
    Hack de selector hijo: html>/**/body p{color:blue}
    Hack de IE5/Mac: /*\*/.selector{color:khaki}/**/

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-trim.