trim: Фильтр, который удаляет пробелы и комментарии из HTML-ответов
Установка на Debian/Ubuntu
Эти документы применимы к пакету APT nginx-module-trim, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT-репозиторий, как описано в настройка APT-репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-trim
Показать версии и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|---------------------|-------------|----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Модуль ngx_http_trim_filter — это фильтр, который изменяет ответ, удаляя ненужные пробелы (пробелы, табуляции, переводы строк) и комментарии из HTML (включая встроенный javascript и css). Модуль Trim разбирает HTML с использованием конечного автомата.
Пример конфигурации
location / {
trim on;
trim_js on;
trim_css on;
}
Директивы
trim on | off
По умолчанию: trim off
Контекст: http, server, location
Включить или отключить модуль trim для чистого HTML.
Этот модуль сохранит некоторые содержимое в неизменном виде, если они заключены в теги pre, textarea, script и style, а также комментарии IE/SSI/ESI.
Значение параметра может содержать переменные.
Пример:
set $flag "off";
if ($condition) {
set $flag "on";
}
trim $flag;
trim_js on | off
По умолчанию: trim_js off
Контекст: http, server, location
Включить или отключить модуль trim для встроенного javascript.
Значение параметра также может содержать переменные.
trim_css on | off
По умолчанию: trim_css off
Контекст: http, server, location
Включить или отключить модуль trim для встроенного css.
Значение параметра также может содержать переменные.
trim_types MIME types
По умолчанию: trim_types: text/html
Контекст: http, server, location
Включить модуль trim для указанных MIME типов в дополнение к "text/html". Ответы с типом “text/html” всегда обрабатываются.
Отладка
Модуль trim будет отключен, если входящий запрос имеет параметр http_trim=off в URL.
например, http://www.xxx.com/index.html?http_trim=off
Пример
оригинал:
<!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">
/*** muitl comment
***/
//// single comment
str.replace(/ /,"hello");
</script>
<style type="text/css" >
/*** css comment
! ***/
body
{
font-size: 20px ;
line-height: 150% ;
}
</style>
результат:
<!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>
Правило Trim
Html
Пробелы
- Удалить '\r'.
- Заменить '\t' на пробел.
- Заменить несколько пробелов одним пробелом.
- Заменить несколько '\n' одним '\n'.
- Заменить несколько '\n' и '\t' в теге на один пробел.
- Не обрезать строковые значения в кавычках в теге.
- Не обрезать содержимое, заключенное в теги
pre,textarea,scriptиstyle.
Комментарий
- Удалить html комментарии(
<!-- -->). - Не обрезать комментарии IE/SSI/ESI.
Комментарий IE:<!--[if <![endif]-->
Комментарий SSI:<!--# -->
Комментарий ESI:<!--esi -->
Javascript
Содержимое, заключенное в <script type="text/javascript"> или <script>, будет определено как javascript.
Пробелы
- Удалить '\r'.
- Удалить '\t', '\n' и пробел после '(', ',', '=', ':', '[', '!', '&', '|', '?', ';', '>', '~', '*', '{'.
- Заменить несколько пробелов одним пробелом.
- Не обрезать строковые значения и литералы регулярных выражений.
Комментарий
- Удалить однострочный комментарий.
// - Удалить многострочный комментарий.
/* */
Css
Содержимое, заключенное в <style type="text/css"> или <style>, будет определено как css.
Пробелы
- Удалить '\r'.
- Удалить '\t', '\n' и пробелы вокруг ';', '>', '{', '}', ':', ','.
- Заменить несколько '\n' и пробелов одним пробелом.
- Не обрезать строковые значения.
Комментарий
- Удалить css комментарии(
/* */). - Не удалять комментарии селекторов дочерних элементов и хаков IE5 / Mac.
Хак селектора дочернего элемента:html>/**/body p{color:blue}
Хак IE5 / Mac:/*\*/.selector{color:khaki}/**/