Перейти к содержанию

trim: Фильтр, который удаляет пробелы и комментарии из HTML-ответов

Установка на Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-trim, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT-репозиторий, как описано в настройка APT-репозитория.
  2. Установите модуль:
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}/**/