]> granicus.if.org Git - apache/blob - docs/manual/filter.html.en
xforms
[apache] / docs / manual / filter.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Filters - Apache HTTP Server</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
12 <script src="./style/scripts/prettify.js" type="text/javascript">
13 </script>
14
15 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
18 <p class="apache">Apache HTTP Server Version 2.5</p>
19 <img alt="" src="./images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
21 <div id="path">
22 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Filters</h1>
23 <div class="toplang">
24 <p><span>Available Languages: </span><a href="./en/filter.html" title="English">&nbsp;en&nbsp;</a> |
25 <a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
26 <a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
27 <a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
28 <a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
29 <a href="./tr/filter.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
30 </div>
31
32     <p>This document describes the use of filters in Apache.</p>
33   </div>
34 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#intro">Filtering in Apache 2</a></li>
35 <li><img alt="" src="./images/down.gif" /> <a href="#smart">Smart Filtering</a></li>
36 <li><img alt="" src="./images/down.gif" /> <a href="#service">Exposing Filters as an HTTP Service</a></li>
37 <li><img alt="" src="./images/down.gif" /> <a href="#using">Using Filters</a></li>
38 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
39 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
40 <div class="section">
41 <h2><a name="intro" id="intro">Filtering in Apache 2</a></h2>
42     
43     <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_filter.html">mod_filter</a></code></li><li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code></li><li><code class="module"><a href="./mod/mod_reflector.html">mod_reflector</a></code></li><li><code class="module"><a href="./mod/mod_buffer.html">mod_buffer</a></code></li><li><code class="module"><a href="./mod/mod_data.html">mod_data</a></code></li><li><code class="module"><a href="./mod/mod_ratelimit.html">mod_ratelimit</a></code></li><li><code class="module"><a href="./mod/mod_reqtimeout.html">mod_reqtimeout</a></code></li><li><code class="module"><a href="./mod/mod_request.html">mod_request</a></code></li><li><code class="module"><a href="./mod/mod_sed.html">mod_sed</a></code></li><li><code class="module"><a href="./mod/mod_substitute.html">mod_substitute</a></code></li><li><code class="module"><a href="./mod/mod_xml2enc.html">mod_xml2enc</a></code></li><li><code class="module"><a href="./mod/mod_proxy_html.html">mod_proxy_html</a></code></li><li><code class="module"><a href="./mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_filter.html#filterchain">FilterChain</a></code></li><li><code class="directive"><a href="./mod/mod_filter.html#filterdeclare">FilterDeclare</a></code></li><li><code class="directive"><a href="./mod/mod_filter.html#filterprotocol">FilterProtocol</a></code></li><li><code class="directive"><a href="./mod/mod_filter.html#filterprovider">FilterProvider</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code></li><li><code class="directive"><a href="./mod/mod_reflector.html#reflectorheader">ReflectorHeader</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></code></li><li><code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code></li><li><code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code></li></ul></td></tr></table>
44
45 <p>The Filter Chain is available in Apache 2.0 and higher,
46 and enables applications to process incoming and outgoing data
47 in a highly flexible and configurable manner, regardless of
48 where the data comes from.  We can pre-process incoming data,
49 and post-process outgoing data, at will.  This is basically
50 independent of the traditional request processing phases.</p>
51 <p class="figure">
52 <img src="images/filter_arch.png" width="569" height="392" alt="Filters can be chained, in a Data Axis orthogonal to request processing" />
53 </p>
54 <p>Some examples of filtering in the standard Apache distribution are:</p>
55 <ul>
56 <li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code>, implements server-side includes.</li>
57 <li><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code>, implements SSL encryption (https).</li>
58 <li><code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>, implements compression/decompression on the fly.</li>
59 <li><code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code>, transcodes between different character sets.</li>
60 <li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>, runs an external program as a filter.</li>
61 </ul>
62 <p>Apache also uses a number of filters internally to perform
63 functions like chunking and byte-range handling.</p>
64
65 <p>A wider range of applications are implemented by third-party filter
66 modules available from <a href="http://modules.apache.org/">modules.apache.org</a> and
67 elsewhere.  A few of these are:</p>
68
69 <ul>
70 <li>HTML and XML processing and rewriting</li>
71 <li>XSLT transforms and XIncludes</li>
72 <li>XML Namespace support</li>
73 <li>File Upload handling and decoding of HTML Forms</li>
74 <li>Image processing</li>
75 <li>Protection of vulnerable applications such as PHP scripts</li>
76 <li>Text search-and-replace editing</li>
77 </ul>
78 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
79 <div class="section">
80 <h2><a name="smart" id="smart">Smart Filtering</a></h2>
81
82 <p class="figure">
83 <img src="images/mod_filter_new.png" width="423" height="331" alt="Smart filtering applies different filter providers according to the state of request processing" />
84 </p>
85 <p><code class="module"><a href="./mod/mod_filter.html">mod_filter</a></code>, included in Apache 2.1 and later,
86 enables the filter chain to be configured dynamically at run time.
87 So for example you can set up a proxy to rewrite
88 HTML with an HTML filter and JPEG images with a completely
89 separate filter, despite the proxy having no prior information
90 about what the origin server will send.  This works by using a
91 filter harness, that dispatches to different providers according
92 to the actual contents at runtime.  Any filter may be either
93 inserted directly in the chain and run unconditionally, or
94 used as a provider and inserted dynamically.  For example,</p>
95 <ul>
96 <li>an HTML processing filter will only run if the content is
97 text/html or application/xhtml+xml</li>
98 <li>A compression filter will only run if the input is a
99 compressible type and not already compressed</li>
100 <li>A charset conversion filter will be inserted if a text
101 document is not already in the desired charset</li>
102 </ul>
103 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
104 <div class="section">
105 <h2><a name="service" id="service">Exposing Filters as an HTTP Service</a></h2>
106
107
108 <p>Filters can be used to process content originating from the client in
109 addition to processing content originating on the server using the
110 <code class="module"><a href="./mod/mod_reflector.html">mod_reflector</a></code> module.</p>
111
112 <p><code class="module"><a href="./mod/mod_reflector.html">mod_reflector</a></code> accepts POST requests from clients, and reflects
113 the content request body received within the POST request back in the response,
114 passing through the output filter stack on the way back to the client.</p>
115
116 <p>This technique can be used as an alternative to a web service running within
117 an application server stack, where an output filter provides the transformation
118 required on the request body. For example, the <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>
119 module might be used to provide a general compression service, or an image
120 transformation filter might be turned into an image transformation service.</p>
121
122 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
123 <div class="section">
124 <h2><a name="using" id="using">Using Filters</a></h2>
125
126 <p>There are two ways to use filtering: Simple and Dynamic.
127 In general, you should use one or the other; mixing them can
128 have unexpected consequences (although simple Input filtering
129 can be mixed freely with either simple or dynamic Output filtering).</p>
130 <p>The Simple Way is the only way to configure input filters, and is
131 sufficient for output filters where you need a static filter chain.
132 Relevant directives are
133     <code class="directive"><a href="./mod/core.html#setinputfilter">SetInputFilter</a></code>,
134     <code class="directive"><a href="./mod/core.html#setoutputfilter">SetOutputFilter</a></code>,
135     <code class="directive"><a href="./mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>,
136     <code class="directive"><a href="./mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>,
137     <code class="directive"><a href="./mod/mod_mime.html#removeinputfilter">RemoveInputFilter</a></code>, and
138     <code class="directive"><a href="./mod/mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></code>.</p>
139
140 <p>The Dynamic Way enables both static and flexible, dynamic configuration
141 of output filters, as discussed in the <code class="module"><a href="./mod/mod_filter.html">mod_filter</a></code> page.
142 Relevant directives are
143     <code class="directive"><a href="./mod/mod_filter.html#filterchain">FilterChain</a></code>,
144     <code class="directive"><a href="./mod/mod_filter.html#filterdeclare">FilterDeclare</a></code>, and
145     <code class="directive"><a href="./mod/mod_filter.html#filterprovider">FilterProvider</a></code>.</p>
146
147 <p>One further directive <code class="directive"><a href="./mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code> is still supported,
148 but deprecated.  Use dynamic configuration instead.</p>
149
150   </div></div>
151 <div class="bottomlang">
152 <p><span>Available Languages: </span><a href="./en/filter.html" title="English">&nbsp;en&nbsp;</a> |
153 <a href="./es/filter.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
154 <a href="./fr/filter.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
155 <a href="./ja/filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
156 <a href="./ko/filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
157 <a href="./tr/filter.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
158 </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected 
159 to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div>
160 <script type="text/javascript"><!--//--><![CDATA[//><!--
161 var lang = 'en';
162 var disqus_shortname = 'httpd';
163 var disqus_identifier = window.location.href.replace(/(current|trunk)/, "2.4").replace(/\/[a-z]{2}\//, "/").replace(window.location.protocol, "http:") + '.' + lang;
164 if (disqus_identifier.indexOf("httpd.apache.org") == -1) {
165     document.write('<div id="disqus_thread">\n</div>');
166     (function() {
167                 var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
168                 dsq.src = window.location.protocol + '//' + disqus_shortname + '.disqus.com/embed.js';
169             (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
170         })();
171 } else {
172     document.write("Comments have been disabled for offline viewing.");
173 }
174 //--><!]]></script></div><div id="footer">
175 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
176 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
177 if (typeof(prettyPrint) !== undefined) {
178     prettyPrint();
179 }
180 //--><!]]></script>
181 </body></html>