On this page
Filters
本文档介绍了 Apache 中过滤器的用法。
在 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 表单的文件上传处理和解码
Image processing
保护易受攻击的应用程序,例如 PHP 脚本
文本搜索和替换编辑
Smart Filtering
Apache 2.1 及更高版本中包含的mod_filter允许在运行时动态配置过滤器链。因此,例如,您可以设置代理以使用 HTML 过滤器重写 HTML,并使用完全独立的过滤器重写 JPEG 图像,尽管该代理没有有关原始服务器将发送的内容的事先信息。这是通过使用筛选器工具进行的,该筛选器工具在运行时根据实际内容调度到不同的提供程序。任何过滤器都可以直接插入到链中并无条件运行,也可以用作提供者并动态插入。例如,
仅当内容为 text/html 或 application/xhtml xml 时,HTML 处理过滤器才会运行
仅当 Importing 为可压缩类型且尚未压缩时,压缩过滤器才会运行
如果文本文档不在所需的字符集中,则将插入一个字符集转换过滤器
将过滤器作为 HTTP 服务公开
除使用mod_reflector模块处理源自服务器的内容外,筛选器还可用于处理源自 Client 端的内容。
mod_reflector接受来自 Client 端的 POST 请求,并在返回 Client 端的途中通过输出过滤器堆栈,将 POST 请求中收到的内容请求正文反映回响应中。
此技术可以用作在应用程序服务器堆栈中运行的 Web 服务的替代方法,在该服务器中,输出过滤器可提供请求正文所需的转换。例如,mod_deflate模块可以用于提供常规压缩服务,或者图像转换过滤器可以转换为图像转换服务。
Using Filters
有两种使用过滤的方法:简单和动态。通常,您应该使用其中一个。混合它们会产生意想不到的后果(尽管简单的 Importing 过滤可以与简单的或动态的输出过滤自由混合)。
简单方法是配置 Importing 过滤器的唯一方法,对于需要静态过滤器链的输出过滤器来说已经足够。相关指令是SetInputFilter,SetOutputFilter,AddInputFilter,AddOutputFilter,RemoveInputFilter和RemoveOutputFilter。
如mod_filter页中所述,动态方式可实现输出滤波器的静态和灵活,动态配置。相关指令是FilterChain,FilterDeclare和FilterProvider。
仍支持另一个指令AddOutputFilterByType,但已弃用。请改用动态配置。