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