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