diff --git a/docs/manual/mod/index.html.en b/docs/manual/mod/index.html.en index d8eb56d874..9e81484333 100644 --- a/docs/manual/mod/index.html.en +++ b/docs/manual/mod/index.html.en @@ -55,8 +55,8 @@ address)
Apache HTTP Server Version 2.0

| Description: - | Compress content before - it is delivered to the client |
|---|---|
| Status: + | Compress content before it is delivered to the +client |
| Status: | Extension |
| Module Identifier: | deflate_module |
| Source File: | mod_deflate.c |
DeflateFilterNote
DeflateMemLevel
DeflateWindowSize
Enabling CompressionThis is a sample configuration for the impatient. But please take + the time and read the sections below for a detailed description!
-Compression is implemented by the DEFLATE
- filter. The following directive
- will enable compression for documents in the container where it
- is placed:
Most popular browsers can not handle compression of all content - so you may want to set the 'gzip-only-text/html' note to 1 to only - allow html files to be compressed (see below).
-If you set this to anything but '1' it will be ignored, so you can do - negative matches.
+
+ <Location />
+
+ # insert filter
+ SetOutputFilter DEFLATE
+
+ # Netscape 4.x has some problems...
+ BrowserMatch ^Mozilla/4 gzip-only-text/html
+
+ # Netscape 4.06-4.08 have some more problems
+ BrowserMatch ^Mozilla/4\.0[678] no-gzip
+
+ # fix identity
+ BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
+
+ # don't bother:
+ SetEnvIfNoCase Request_URI \
+
+ \.(?:gif|jpe?g|png)$ no-gzip dont-vary
+
+
+ # be verbose about configuration
+ Header append Vary User-Agent env=!dont-vary
+
+ </Location>
+
SetEnv gzip-only-text/html 1
-SetOutputFilter DEFLATE
-
Note, that gzip compression of binary files (e.g. images)
+ usually has only little effect. Therefore in the example above we use
+ an exclusion list of some file types. Alternatively you may use a
+ positive list using AddOutputFilter or AddOutputFilterByType instead of the SetOutputFilter directive.
Here is an example of enabling compression for the Apache - documentation:
+Compression is implemented by the DEFLATE
+ filter. The following directive
+ will enable compression for documents in the container where it
+ is placed:
-<Directory "/your-server-root/manual">
- SetEnv gzip-only-text/html 1
- SetOutputFilter DEFLATE
-</Directory>
-
+ SetOutputFilter DEFLATE
+
For browsers that have problems even with compression of html files,
- use the BrowserMatch directive to set the 'no-gzip' note
- for that particular browser so that no compression will be performed.
Some popular browsers cannot handle compression of all content
+ so you may want to set the gzip-only-text/html note to
+ 1 to only allow html files to be compressed (see
+ below). If you set this to anything but 1 it
+ will be ignored.
If you want to restrict the compression to particular MIME types
+ in general, you may use the AddOutputFilterByType directive. Here is an example of
+ enabling compression only for the html files of the Apache
+ documentation:
+ <Directory "/your-server-root/manual">
+
+ AddOutputFilterByType DEFLATE text/html
+
+ </Directory>
+
For browsers that have problems even with compression of all file
+ types, use the BrowserMatch directive to set the no-gzip
+ note for that particular browser so that no compression will be
+ performed. You may combine no-gzip with gzip-only-text/html to get the best results. In that case
+ the former overrides the latter. Take a look at the following
+ excerpt from the configuration example
+ defined in the section above:
+ BrowserMatch ^Mozilla/4 gzip-only-text/html
+ BrowserMatch ^Mozilla/4\.0[678] no-gzip
+ BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
+
At first we probe for a User-Agent string that
+ indicates a Netscape Navigator version of 4.x. These versions
+ have some big problems to decompress content types different
+ from text/html. The versions 4.06, 4.07 and 4.08 have
+ also sometimes problems to decompress html files. Thus, we
+ completely turn off the deflate filter for them.
The third BrowserMatch
+ directive fixes the guessed identity of the user agent, because
+ the Microsoft Internet Explorer identifies itself also as "Mozilla/4"
+ but is actually able to handle requested compression. Therefore we
+ match against the additional string "MSIE" (\b means
+ "word boundary") in the User-Agent Header and turn off
+ the restrictions defined before.
DEFLATE filter is always inserted after RESOURCE
+ filters like PHP or SSI. It never touches internal subrequests.
+ The mod_deflate module also provides a filter for
+ decompressing a gzip compressed request body . In order to activate
+ this feature you have to insert the DEFLATE filter into
+ the input filter chain using SetInputFilter or AddInputFilter, for example:
+ <Location /dav-area>
+
+ SetInputFilter DEFLATE
+
+ </Location>
+
Now if a request contains a Content-Encoding: gzip
+ header, the body will be automatically decompressed. Ordinary
+ browsers usually don't have the ability to gzip e.g. POST
+ request bodies. However, some special applications actually do
+ support request compression, for instance WebDAV clients.
If you evaluate the request body yourself, don't trust
+ the Content-Length header! For example, a
+ wide-spread code to read the request body in perl is:
+ # WRONG!
+ if (($len = $ENV{'CONTENT_LENGTH'}) > 0) {
+
+ read(STDIN, $body, $len);
+
+ }
+
Since the Content-Length header reflects the length of the + incoming data from the client and not the byte count of + the decompressed data, you would read too less and cut off the + stream.
+ +Thus, if you want to slurp the whole request body, use for + example:
+ +
+ {
+
+ local $/; # undef input record separator
+ $body = <STDIN>;
+
+ }
+
Since the DEFLATE output filter actually performs a
+ kind of content negotiation,
+ you should take care of caching proxy servers. In order to prevent a
+ proxy cache from delivering the wrong data (e.g. gzip
+ compressed data to a client which doesn't send an appropriate
+ Accept-Encoding header), the origin server
+ (i.e. you) has to indicate the negotiation parameters in the
+ Vary response header.
If the DEFLATE filter is involved in the request, the
+ following header will be set:
+ Vary: Accept-Encoding
+
A HTTP compiliant proxy now delivers the cached data to any client,
+ which sends the same Accept-Encoding header as
+ the client, which did the initial request that was cached.
Fine. But what happens, if you use some special exclusions dependant
+ on, say the User-Agent header? The proxy server doesn't
+ know anything about your server configuration, thus you have to tell
+ him, what you're doing. You have to use the mod_headers
+ module to add appropriate values to the Vary header, for
+ example:
+ Header append Vary User-Agent
+
would result in the following response header:
+ +
+ Vary: Accept-Encoding,User-Agent
+
If your decision about compression depends on other information
+ than request headers (e.g. HTTP version), you have to set the
+ Vary header to the value *. This prevents
+ documents from caching by HTTP compiliant proxies at all.
+ Header set Vary *
+