Filters

本文档介绍了 Apache 中过滤器的用法。

在 Apache 2 中过滤

Related Modules Related Directives
mod_filter
mod_deflate
mod_ext_filter
mod_include
mod_charset_lite
mod_reflector
mod_buffer
mod_data
mod_ratelimit
mod_reqtimeout
mod_request
mod_sed
mod_substitute
mod_xml2enc
mod_proxy_html
FilterChain
FilterDeclare
FilterProtocol
FilterProvider
AddInputFilter
AddOutputFilter
RemoveInputFilter
RemoveOutputFilter
ReflectorHeader
ExtFilterDefine
ExtFilterOptions
SetInputFilter
SetOutputFilter

过滤器链在 Apache 2.0 及更高版本中可用,并且使应用程序能够以高度灵活和可配置的方式处理传入和传出数据,而不管数据来自何处。我们可以随意处理传入数据,并进行后期处理。这基本上独立于传统的请求处理阶段。

标准 Apache 发行版中的一些过滤示例如下:

Apache 还内部使用了许多过滤器来执行诸如组块和字节范围处理之类的功能。

modules.apache.org和其他地方提供的第三方过滤器模块可以实现更广泛的应用程序。其中一些是:

Smart Filtering

Apache 2.1 及更高版本中包含的mod_filter允许在运行时动态配置过滤器链。因此,例如,您可以设置代理以使用 HTML 过滤器重写 HTML,并使用完全独立的过滤器重写 JPEG 图像,尽管该代理没有有关原始服务器将发送的内容的事先信息。这是通过使用筛选器工具进行的,该筛选器工具在运行时根据实际内容调度到不同的提供程序。任何过滤器都可以直接插入到链中并无条件运行,也可以用作提供者并动态插入。例如,

将过滤器作为 HTTP 服务公开

除使用mod_reflector模块处理源自服务器的内容外,筛选器还可用于处理源自 Client 端的内容。

mod_reflector接受来自 Client 端的 POST 请求,并在返回 Client 端的途中通过输出过滤器堆栈,将 POST 请求中收到的内容请求正文反映回响应中。

此技术可以用作在应用程序服务器堆栈中运行的 Web 服务的替代方法,在该服务器中,输出过滤器可提供请求正文所需的转换。例如,mod_deflate模块可以用于提供常规压缩服务,或者图像转换过滤器可以转换为图像转换服务。

Using Filters

有两种使用过滤的方法:简单和动态。通常,您应该使用其中一个。混合它们会产生意想不到的后果(尽管简单的 Importing 过滤可以与简单的或动态的输出过滤自由混合)。

简单方法是配置 Importing 过滤器的唯一方法,对于需要静态过滤器链的输出过滤器来说已经足够。相关指令是SetInputFilterSetOutputFilterAddInputFilterAddOutputFilterRemoveInputFilterRemoveOutputFilter

mod_filter页中所述,动态方式可实现输出滤波器的静态和灵活,动态配置。相关指令是FilterChainFilterDeclareFilterProvider

仍支持另一个指令AddOutputFilterByType,但已弃用。请改用动态配置。

首页