Apache HTTP 服务器版本 2.4
相关模块 | 相关指令 |
---|---|
过滤器链在 Apache 2.0 及更高版本中可用,它使应用程序能够以高度灵活和可配置的方式处理传入和传出数据,无论数据来自何处。我们可以随意预处理传入数据和后处理传出数据。这基本上独立于传统的请求处理阶段。
标准 Apache 发行版中过滤的一些示例是
mod_include
,实现服务器端包含。mod_ssl
,实现 SSL 加密 (https)。mod_deflate
,实现动态压缩/解压缩。mod_charset_lite
,在不同的字符集之间进行转码。mod_ext_filter
,运行外部程序作为过滤器。Apache 还使用许多内部过滤器来执行诸如分块和字节范围处理之类的功能。
第三方过滤器模块实现了更广泛的应用程序。其中一些是
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
仍然受支持,但已弃用。请改用动态配置。