Фильтры
В этом документе описано использование фильтров в 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 и XInclude
- Поддержка пространств имен 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