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,scriptystyle.
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.