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
8 <title>mod_deflate - 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">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
17 <div id="page-header">
18 <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>
19 <p class="apache">Apache HTTP Server Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
23 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Modules</a></div>
24 <div id="page-content">
25 <div id="preamble"><h1>Apache Module mod_deflate</h1>
27 <p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" title="English"> en </a> |
28 <a href="../fr/mod/mod_deflate.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
29 <a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
30 <a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
32 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Compress content before it is delivered to the
34 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
35 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>deflate_module</td></tr>
36 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_deflate.c</td></tr></table>
39 <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module provides
40 the <code>DEFLATE</code> output filter that allows output from
41 your server to be compressed before being sent to the client over
44 <div id="quickview"><h3 class="directives">Directives</h3>
46 <li><img alt="" src="../images/down.gif" /> <a href="#deflatebuffersize">DeflateBufferSize</a></li>
47 <li><img alt="" src="../images/down.gif" /> <a href="#deflatecompressionlevel">DeflateCompressionLevel</a></li>
48 <li><img alt="" src="../images/down.gif" /> <a href="#deflatefilternote">DeflateFilterNote</a></li>
49 <li><img alt="" src="../images/down.gif" /> <a href="#deflatememlevel">DeflateMemLevel</a></li>
50 <li><img alt="" src="../images/down.gif" /> <a href="#deflatewindowsize">DeflateWindowSize</a></li>
54 <li><img alt="" src="../images/down.gif" /> <a href="#recommended">Sample Configurations</a></li>
55 <li><img alt="" src="../images/down.gif" /> <a href="#enable">Enabling Compression</a></li>
56 <li><img alt="" src="../images/down.gif" /> <a href="#proxies">Dealing with proxy servers</a></li>
57 </ul><h3>See also</h3>
59 <li><a href="../filter.html">Filters</a></li>
60 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
61 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
63 <h2><a name="recommended" id="recommended">Sample Configurations</a></h2>
64 <p>This is a simple sample configuration for the impatient.</p>
66 <div class="example"><h3>Compress only a few types</h3><pre class="prettyprint lang-config">
67 AddOutputFilterByType DEFLATE text/html text/plain text/xml
71 <p>The following configuration, while resulting in more compressed content,
72 is also much more complicated. Do not use this unless you fully understand
73 all the configuration details.</p>
75 <div class="example"><h3>Compress everything except images</h3><pre class="prettyprint lang-config">
78 SetOutputFilter DEFLATE
80 # Netscape 4.x has some problems...
81 BrowserMatch ^Mozilla/4 gzip-only-text/html
83 # Netscape 4.06-4.08 have some more problems
84 BrowserMatch ^Mozilla/4\.0[678] no-gzip
86 # MSIE masquerades as Netscape, but it is fine
87 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
88 # Don't compress images
89 SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
91 # Make sure proxies don't deliver the wrong content
92 Header append Vary User-Agent env=!dont-vary
97 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
99 <h2><a name="enable" id="enable">Enabling Compression</a></h2>
101 <h3><a name="output" id="output">Output Compression</a></h3>
102 <p>Compression is implemented by the <code>DEFLATE</code>
103 <a href="../filter.html">filter</a>. The following directive
104 will enable compression for documents in the container where it
107 <pre class="prettyprint lang-config">
108 SetOutputFilter DEFLATE
112 <p>Some popular browsers cannot handle compression of all content
113 so you may want to set the <code>gzip-only-text/html</code> note to
114 <code>1</code> to only allow html files to be compressed (see
115 below). If you set this to <em>anything but <code>1</code></em> it
118 <p>If you want to restrict the compression to particular MIME types
119 in general, you may use the <code class="directive"><a href="../mod/mod_filter.html#addoutputfilterbytype">AddOutputFilterByType</a></code> directive. Here is an example of
120 enabling compression only for the html files of the Apache
123 <pre class="prettyprint lang-config">
124 <Directory "/your-server-root/manual">
125 AddOutputFilterByType DEFLATE text/html
130 <p>For browsers that have problems even with compression of all file
131 types, use the <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> directive to set the <code>no-gzip</code>
132 note for that particular browser so that no compression will be
133 performed. You may combine <code>no-gzip</code> with <code>gzip-only-text/html</code> to get the best results. In that case
134 the former overrides the latter. Take a look at the following
135 excerpt from the <a href="#recommended">configuration example</a>
136 defined in the section above:</p>
138 <pre class="prettyprint lang-config">
139 BrowserMatch ^Mozilla/4 gzip-only-text/html
140 BrowserMatch ^Mozilla/4\.0[678] no-gzip
141 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
145 <p>At first we probe for a <code>User-Agent</code> string that
146 indicates a Netscape Navigator version of 4.x. These versions
147 cannot handle compression of types other than
148 <code>text/html</code>. The versions 4.06, 4.07 and 4.08 also
149 have problems with decompressing html files. Thus, we completely
150 turn off the deflate filter for them.</p>
152 <p>The third <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
153 directive fixes the guessed identity of the user agent, because
154 the Microsoft Internet Explorer identifies itself also as "Mozilla/4"
155 but is actually able to handle requested compression. Therefore we
156 match against the additional string "MSIE" (<code>\b</code> means
157 "word boundary") in the <code>User-Agent</code> Header and turn off
158 the restrictions defined before.</p>
160 <div class="note"><h3>Note</h3>
161 The <code>DEFLATE</code> filter is always inserted after RESOURCE
162 filters like PHP or SSI. It never touches internal subrequests.
164 <div class="note"><h3>Note</h3>
165 There is a environment variable <code>force-gzip</code>,
166 set via <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>, which
167 will ignore the accept-encoding setting of your browser and will
168 send compressed output.
172 <h3><a name="inflate" id="inflate">Output Decompression</a></h3>
173 <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
174 inflating/uncompressing a gzip compressed response body. In order to activate
175 this feature you have to insert the <code>INFLATE</code> filter into
176 the outputfilter chain using <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>, for example:</p>
178 <pre class="prettyprint lang-config">
179 <Location /dav-area>
180 ProxyPass http://example.com/
181 SetOutputFilter INFLATE
186 <p>This Example will uncompress gzip'ed output from example.com, so other
187 filters can do further processing with it.
191 <h3><a name="input" id="input">Input Decompression</a></h3>
192 <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module also provides a filter for
193 decompressing a gzip compressed request body . In order to activate
194 this feature you have to insert the <code>DEFLATE</code> filter into
195 the input filter chain using <code class="directive"><a href="../mod/core.html#setinputfilter">SetInputFilter</a></code> or <code class="directive"><a href="../mod/mod_mime.html#addinputfilter">AddInputFilter</a></code>, for example:</p>
197 <pre class="prettyprint lang-config">
198 <Location /dav-area>
199 SetInputFilter DEFLATE
204 <p>Now if a request contains a <code>Content-Encoding:
205 gzip</code> header, the body will be automatically decompressed.
206 Few browsers have the ability to gzip request bodies. However,
207 some special applications actually do support request
208 compression, for instance some <a href="http://www.webdav.org">WebDAV</a> clients.</p>
210 <div class="warning"><h3>Note on Content-Length</h3>
211 <p>If you evaluate the request body yourself, <em>don't trust
212 the <code>Content-Length</code> header!</em>
213 The Content-Length header reflects the length of the
214 incoming data from the client and <em>not</em> the byte count of
215 the decompressed data stream.</p>
218 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
219 <div class="section">
220 <h2><a name="proxies" id="proxies">Dealing with proxy servers</a></h2>
222 <p>The <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> module sends a <code>Vary:
223 Accept-Encoding</code> HTTP response header to alert proxies that
224 a cached response should be sent only to clients that send the
225 appropriate <code>Accept-Encoding</code> request header. This
226 prevents compressed content from being sent to a client that will
227 not understand it.</p>
229 <p>If you use some special exclusions dependent
230 on, for example, the <code>User-Agent</code> header, you must
231 manually configure an addition to the <code>Vary</code> header
232 to alert proxies of the additional restrictions. For example,
233 in a typical configuration where the addition of the <code>DEFLATE</code>
234 filter depends on the <code>User-Agent</code>, you should add:</p>
236 <pre class="prettyprint lang-config">
237 Header append Vary User-Agent
241 <p>If your decision about compression depends on other information
242 than request headers (<em>e.g.</em> HTTP version), you have to set the
243 <code>Vary</code> header to the value <code>*</code>. This prevents
244 compliant proxies from caching entirely.</p>
246 <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
251 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
252 <div class="directive-section"><h2><a name="DeflateBufferSize" id="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize" id="deflatebuffersize">Directive</a></h2>
253 <table class="directive">
254 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fragment size to be compressed at one time by zlib</td></tr>
255 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateBufferSize <var>value</var></code></td></tr>
256 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateBufferSize 8096</code></td></tr>
257 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
258 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
259 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
261 <p>The <code class="directive">DeflateBufferSize</code> directive specifies
262 the size in bytes of the fragments that zlib should compress at one
266 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
267 <div class="directive-section"><h2><a name="DeflateCompressionLevel" id="DeflateCompressionLevel">DeflateCompressionLevel</a> <a name="deflatecompressionlevel" id="deflatecompressionlevel">Directive</a></h2>
268 <table class="directive">
269 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How much compression do we apply to the output</td></tr>
270 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateCompressionLevel <var>value</var></code></td></tr>
271 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Zlib's default</code></td></tr>
272 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
273 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
274 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
275 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>This directive is available since Apache 2.0.45</td></tr>
277 <p>The <code class="directive">DeflateCompressionLevel</code> directive specifies
278 what level of compression should be used, the higher the value,
279 the better the compression, but the more CPU time is required to
281 <p>The value must between 1 (less compression) and 9 (more compression).</p>
284 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
285 <div class="directive-section"><h2><a name="DeflateFilterNote" id="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote" id="deflatefilternote">Directive</a></h2>
286 <table class="directive">
287 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Places the compression ratio in a note for logging</td></tr>
288 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateFilterNote [<var>type</var>] <var>notename</var></code></td></tr>
289 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
290 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
291 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
292 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td><var>type</var> is available since Apache 2.0.45</td></tr>
294 <p>The <code class="directive">DeflateFilterNote</code> directive
295 specifies that a note about compression ratios should be attached
296 to the request. The name of the note is the value specified for
297 the directive. You can use that note for statistical purposes by
298 adding the value to your <a href="../logs.html#accesslog">access log</a>.</p>
300 <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
301 DeflateFilterNote ratio
303 LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
304 CustomLog logs/deflate_log deflate
308 <p>If you want to extract more accurate values from your logs, you
309 can use the <var>type</var> argument to specify the type of data
310 left as note for logging. <var>type</var> can be one of:</p>
313 <dt><code>Input</code></dt>
314 <dd>Store the byte count of the filter's input stream in the note.</dd>
316 <dt><code>Output</code></dt>
317 <dd>Store the byte count of the filter's output stream in the note.</dd>
319 <dt><code>Ratio</code></dt>
320 <dd>Store the compression ratio (<code>output/input * 100</code>)
321 in the note. This is the default, if the <var>type</var> argument
325 <p>Thus you may log it this way:</p>
327 <div class="example"><h3>Accurate Logging</h3><pre class="prettyprint lang-config">
328 DeflateFilterNote Input instream
329 DeflateFilterNote Output outstream
330 DeflateFilterNote Ratio ratio
332 LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
333 CustomLog logs/deflate_log deflate
339 <li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
342 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
343 <div class="directive-section"><h2><a name="DeflateMemLevel" id="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel" id="deflatememlevel">Directive</a></h2>
344 <table class="directive">
345 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>How much memory should be used by zlib for compression</td></tr>
346 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateMemLevel <var>value</var></code></td></tr>
347 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateMemLevel 9</code></td></tr>
348 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
349 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
350 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
352 <p>The <code class="directive">DeflateMemLevel</code> directive specifies
353 how much memory should be used by zlib for compression
354 (a value between 1 and 9).</p>
357 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
358 <div class="directive-section"><h2><a name="DeflateWindowSize" id="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize" id="deflatewindowsize">Directive</a></h2>
359 <table class="directive">
360 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Zlib compression window size</td></tr>
361 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DeflateWindowSize <var>value</var></code></td></tr>
362 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DeflateWindowSize 15</code></td></tr>
363 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
364 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
365 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_deflate</td></tr>
367 <p>The <code class="directive">DeflateWindowSize</code> directive specifies the
368 zlib compression window size (a value between 1 and 15). Generally, the
369 higher the window size, the higher can the compression ratio be expected.</p>
373 <div class="bottomlang">
374 <p><span>Available Languages: </span><a href="../en/mod/mod_deflate.html" title="English"> en </a> |
375 <a href="../fr/mod/mod_deflate.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
376 <a href="../ja/mod/mod_deflate.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
377 <a href="../ko/mod/mod_deflate.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
378 </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>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
379 <script type="text/javascript"><!--//--><![CDATA[//><!--
380 var comments_shortname = 'httpd';
381 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_deflate.html';
383 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
384 d.write('<div id="comments_thread"><\/div>');
385 var s = d.createElement('script');
386 s.type = 'text/javascript';
388 s.src = 'https://c.apaste.info/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
389 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
392 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
394 })(window, document);
395 //--><!]]></script></div><div id="footer">
396 <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>
397 <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[//><!--
398 if (typeof(prettyPrint) !== 'undefined') {