Aller au contenu

trim: Filtre qui supprime les espaces vides et les commentaires des réponses HTML

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_trim_filter_module.so;

Ce document décrit nginx-module-trim v0.1.0 publié le 27 juin 2024.


Le module ngx_http_trim_filter est un filtre qui modifie une réponse en supprimant les espaces vides inutiles (espaces, tabulations, nouvelles lignes) et les commentaires des HTML (y compris le javascript et le css en ligne). Le module Trim analyse le HTML avec une machine à états.

Exemple de Configuration

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

Directives

trim on | off

Par défaut : trim off

Contexte : http, server, location

Active ou désactive le module trim pour le HTML pur.
Ce module conservera certains contenus inchangés, dans le cas où ils sont entourés par les balises pre, textarea, script et style, ainsi que les commentaires IE/SSI/ESI.
La valeur du paramètre peut contenir des variables.
Exemple :

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


trim_js on | off

Par défaut : trim_js off

Contexte : http, server, location

Active ou désactive le module trim pour le javascript en ligne.
La valeur du paramètre peut également contenir des variables.

trim_css on | off

Par défaut : trim_css off

Contexte : http, server, location

Active ou désactive le module trim pour le css en ligne.
La valeur du paramètre peut également contenir des variables.

trim_types MIME types

Par défaut : trim_types: text/html

Contexte : http, server, location

Active le module trim pour les types MIME spécifiés en plus de "text/html". Les réponses de type “text/html” sont toujours traitées.

Débogage

Le module Trim sera désactivé si la requête entrante a le paramètre http_trim=off dans l'URL.
par ex. http://www.xxx.com/index.html?http_trim=off

Exemple

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>

résultat :

<!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>

Règles de Trim

Html

Espaces vides
  • Supprimer '\r'.
  • Remplacer '\t' par un espace.
  • Remplacer plusieurs espaces par un seul espace.
  • Remplacer plusieurs '\n' par un seul '\n'.
  • Remplacer plusieurs '\n' et '\t' dans une balise par un seul espace.
  • Ne pas supprimer les chaînes de caractères entre guillemets dans une balise.
  • Ne pas supprimer le contenu entouré par les balises pre, textarea, script et style.
Commentaire
  • Supprimer les commentaires HTML (<!-- -->).
  • Ne pas supprimer les commentaires IE/SSI/ESI.
    Commentaire IE : <!--[if <![endif]-->
    Commentaire SSI : <!--# -->
    Commentaire ESI : <!--esi -->

Javascript

Le contenu entouré par <script type="text/javascript"> ou <script> sera identifié comme javascript.

Espaces vides
  • Supprimer '\r'.
  • Supprimer '\t', '\n' et l'espace qui suit '(', ',', '=', ':', '[', '!', '&', '|', '?', ';', '>', '~', '*', '{'.
  • Remplacer plusieurs espaces par un seul espace.
  • Ne pas supprimer les chaînes de caractères entre guillemets et les littéraux d'expressions régulières.
Commentaire
  • Supprimer les commentaires simples. //
  • Supprimer les commentaires multiples. /* */

Css

Le contenu entouré par <style type="text/css"> ou <style> sera identifié comme css.

Espaces vides
  • Supprimer '\r'.
  • Supprimer '\t', '\n' et l'espace qui entoure ';', '>', '{', '}', ':', ','.
  • Remplacer plusieurs '\n' et espaces par un seul espace.
  • Ne pas supprimer les chaînes de caractères entre guillemets.
Commentaire
  • Supprimer les commentaires css (/* */).
  • Ne pas supprimer les sélecteurs enfants et les commentaires de hack IE5 /Mac.
    Hack sélecteur enfant : html>/**/body p{color:blue}
    Hack IE5 /Mac : /*\*/.selector{color:khaki}/**/

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-trim.