本文档介绍了Apache中过滤器的用法。
相关模块 | 相关指令 |
---|---|
过滤器链在Apache 2.0及更高版本中可用,并且使应用程序能够以高度灵活且可配置的方式处理传入和传出的数据,而不管数据来自何处。我们可以随意处理传入数据,并进行后期处理。这基本上独立于传统的请求处理阶段。
标准Apache发行版中的一些过滤示例如下:
mod_include
,实现服务器端包含。mod_ssl
,实现SSL加密(https)。mod_deflate
,可即时执行压缩/解压缩。mod_charset_lite
,在不同字符集之间进行代码转换。mod_ext_filter
,将外部程序作为过滤器运行。Apache还内部使用了许多过滤器来执行诸如组块和字节范围处理之类的功能。
第三方过滤器模块可实现更广泛的应用,这些模块可从modules.apache.org和其他地方获得。其中一些是:
mod_filter
,包括在Apache 2.1和更高版本中,可在运行时动态配置过滤器链。因此,例如,您可以设置代理以使用HTML过滤器重写HTML,并使用完全独立的过滤器重写JPEG图像,尽管该代理没有有关原始服务器将发送的内容的事先信息。这通过使用筛选器工具来工作,该工具在运行时根据实际内容调度到不同的提供程序。任何过滤器都可以直接插入链中并无条件运行,也可以用作提供者并动态插入。例如,
过滤器除了用于使用mod_reflector
模块处理服务器上的内容外,还可用于处理来自客户端的内容
。
mod_reflector
接受来自客户端的POST请求,并在响应中将POST请求中收到的内容请求主体反映回响应中,并在返回客户端的过程中通过输出筛选器堆栈。
此技术可以用作在应用程序服务器堆栈中运行的Web服务的替代方法,其中输出过滤器提供请求主体上所需的转换。例如,该mod_deflate
模块可能用于提供常规压缩服务,或者图像转换过滤器可能变成了图像转换服务。
有两种使用过滤的方法:简单和动态。通常,您应该使用其中一个。混合它们会产生意想不到的后果(尽管简单的输入过滤可以与简单的或动态输出过滤自由混合)。
简单方法是配置输入过滤器的唯一方法,对于需要静态过滤器链的输出过滤器来说足够了。相关的指令是
SetInputFilter
,
SetOutputFilter
,
AddInputFilter
,
AddOutputFilter
,
RemoveInputFilter
,和
RemoveOutputFilter
。
如页面中所述,动态方式可实现输出滤波器的静态和灵活,动态配置mod_filter
。相关的指令是
FilterChain
,
FilterDeclare
和
FilterProvider
。
AddOutputFilterByType
仍然支持另一个指令,但已弃用。请改用动态配置。