Фильтры
В этом документе описывается использование фильтров в Apache.
Фильтрование в Apache 2
| Связанные модули | Связанные директивы |
|---|---|
Цепочка фильтров доступна в Apache 2.0 и более поздних версиях и позволяет приложениям обрабатывать входящие и исходящие данные гибким и настраиваемым образом, независимо от источника данных. Мы можем предварительно обрабатывать входящие данные и после обработки исходящие данные по своему усмотрению. Это в основном независимо от традиционных фаз обработки запросов.
Некоторые примеры фильтрования в стандартном дистрибутиве Apache:
-
mod_include, реализует вставки на стороне сервера. -
mod_ssl, реализует шифрование SSL (https). -
mod_deflate, реализует сжатие/распаковку на лету. -
mod_charset_lite, выполняет транскодирование между различными наборами символов. -
mod_ext_filter, запускает внешнюю программу в качестве фильтра.
Apache также использует ряд внутренних фильтров для выполнения функций, таких как фрагментация и обработка диапазонов байтов.
Более широкий спектр приложений реализуется модулями фильтров сторонних разработчиков. Некоторые из них:
- Обработка и переписывание HTML и XML
- Преобразования XSLT и XIncludes
- Поддержка XML-пространств имен
- Обработка и декодирование загрузок файлов и форм HTML
- Обработка изображений
- Защита уязвимых приложений, таких как скрипты PHP
- Редактирование текста с помощью поиска и замены
Умное фильтрование
mod_filter, включенный в Apache 2.1 и более поздних версиях, позволяет динамически настраивать цепочку фильтров во время выполнения. Например, вы можете настроить прокси для переписывания HTML с помощью HTML-фильтра и JPEG-изображений с совершенно отдельным фильтром, несмотря на то, что прокси не имеет предварительной информации о том, что отправит исходный сервер. Это работает с помощью механизма фильтров, который распределяет задачи различным поставщикам в зависимости от фактического содержимого во время выполнения. Любой фильтр может быть вставлен непосредственно в цепочку и запущен безусловно или использоваться как поставщик и вставляться динамически. Например,
- фильтр обработки HTML будет запущен только в том случае, если содержимое является text/html или application/xhtml+xml
- фильтр сжатия будет запущен только в том случае, если входной тип сжимаем и не сжат
- фильтр преобразования наборов символов будет вставлен, если текстовый документ еще не в требуемом наборе символов
Использование фильтров как HTTP-службы
Фильтры могут использоваться для обработки содержимого, исходящего от клиента, помимо обработки содержимого, исходящего от сервера, с помощью модуля mod_reflector.
mod_reflector принимает POST-запросы от клиентов и отражает тело запроса, полученное в POST-запросе, в ответе, проходя по стеку выходных фильтров по пути к клиенту.
Этот метод может быть использован как альтернатива веб-сервису, работающему в стеке прикладного сервера, где выходной фильтр обеспечивает преобразование, необходимое для тела запроса. Например, модуль mod_deflate может использоваться для предоставления общей службы сжатия, а фильтр преобразования изображения может быть преобразован в службу преобразования изображений.
Использование фильтров
Существует два способа использования фильтрования: простой и динамический. Как правило, вы должны использовать один из них; смешивание может привести к непредвиденным последствиям (хотя простой входной фильтр может быть свободно смешан с простым или динамическим выходным фильтром).
Простой способ — единственный способ настроить входные фильтры и достаточен для выходных фильтров, где вам нужна статическая цепочка фильтров. Соответствующие директивы — SetInputFilter, SetOutputFilter, AddInputFilter, AddOutputFilter, RemoveInputFilter, и RemoveOutputFilter.
Динамический способ позволяет настраивать выходные фильтры как статически, так и гибко, динамически, как описано на странице mod_filter. Соответствующие директивы — FilterChain, FilterDeclare, и FilterProvider.
Еще одна директива AddOutputFilterByType всё ещё поддерживается, но устарела. Используйте динамическую настройку вместо неё.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/filter.html