The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Apache::CompressClientFixup - Perl extension for Apache-1.3.X to avoid gzip compression for some buggy browsers.

INTRODUCTION

Standard gzip compression significantly scales bandwidth, and helps to please clients, who receive the compressed content faster, especially on dial-ups.

Obviously, the success of proper implementation of content compression depends on quality of both sides of the request-response transaction. Since on server side we have 6 open source modules/packages for web content compression (in alphabetic order):

·Apache::Compress
·Apache::Dynagzip
·Apache::Gzip
·Apache::GzipChain
·mod_deflate
·mod_gzip

the main problem of implementation of web content compression deals with fact that some buggy web clients declare the ability to receive and decompress gzipped data in their HTTP requests, but fail to keep promises when the response arrives really compressed.

All known content compression modules rely on Accept-Encoding: gzip HTTP request header in accordance with rfc2616. HTTP server should never respond with compressed content to the client which fails to declare self capability to uncompress data accordingly.

Thinking this way, we would try to unset the incoming Accept-Encoding HTTP header for those buggy clients, because they would better never set it up...

We would separate this fix-up handler from the main compression module for a good reason. Basically, we would benefit from this extraction, because in this case we may create only one common fix-up handler for all known compression modules. It would help to

·Share specific information;
·Simplify the control of every compression module;
·Wider reuse the code of the requests' correction;
·Simplify further upgrades.

DESCRIPTION

This handler is supposed to serve the Fix-Up stage on mod-perl enabled Apache-1.3.X.

It unsets HTTP request header Accept-Encoding for the following web clients:

Microsoft Internet Explorer

Internet Explorer sometimes loses the first 2048 bytes of data that are sent back by Web Servers that use HTTP compression, - Microsoft confirms for MSIE 5.5 in Microsoft Knowledge Base Article - Q313712 (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q313712).

The similiar statement about MSIE 6.0 is confirmed in Microsoft Knowledge Base Article - Q312496.

In accordance with Q313712 and Q312496, these bugs affect transmissions through

HTTP
HTTPS
FTP
Gopher

and special patches for MSIE-5.5 and MSIE-6.0 were published on Internet.

Microsoft has confirmed that this was a problem in the Microsoft products. Microsoft states that this problem was first corrected in Internet Explorer 6 Service Pack 1.

Since then, later versions of MSIE are not supposed to carry this bug at all.

Since the effect is not investigated in appropriate details, this version of the handler does not restrict compression for MSIE, except HTTPS.

Netscape 4.X

This is HTTP/1.0 client. Netscape 4.X is failing to

a) handle <script> referencing compressed JavaScript files (Content-Type: application/x-javascript)
b) handle <link> referencing compressed CSS files (Content-Type: text/css)
c) display the source code of compressed HTML files
d) print compressed HTML files

See detailed description of these bugs at http://www.schroepl.net/projekte/mod_gzip/browser.htm - Michael Schroepl's Web Site.

This version serves cases (a) and (b) as default for this type of browsers. This version serves cases (c) and (d) conditionally.

Partial Request from Any Web Client

This version unsets HTTP header Accept-Encoding for any web client if the HTTP header Range is presented within the request.

INSTALLATION

The installation consists of the two steps:

- Installation to your Perl Library
- Configuration of your Apache Server

Installation to your Perl Library

Use the regular procedure to install this module to your Perl Library.

When you have your local copy of the package type the following:

perl Makefile.PL
make
make test
make install

Note: You should be a root to succeed with the last step...

To install the package from the CPAN try to run

perl -CPAN -e "install Apache::CompressClientFixup"

on your UNIX machine.

Configuration of your Apache Server

Use the idea of the following example to create your own configuration:

PerlModule Apache::CompressClientFixup
<Location /devdoc/Dynagzip>
    SetHandler perl-script
    PerlFixupHandler Apache::CompressClientFixup
    Order Allow,Deny
    Allow from All
</Location>

DEPENDENCIES

This module requires these other modules and libraries:

Apache::Constants;
Apache::Log;
Apache::URI;

which come bandled with mod_perl.

AUTHOR

Slava Bizyayev <slava@cpan.org> - Freelance Software Developer & Consultant.

COPYRIGHT AND LICENSE

Copyright (C) 2002 Slava Bizyayev. All rights reserved.

This package is free software.
You can use it, redistribute it, and/or modify it under the same terms as Perl itself.
The latest version of this module can be found on CPAN.

SEE ALSO

mod_perl at http://perl.apache.org

Apache::Dynagzip at http://search.cpan.org/author/SLAVA/

Michael Schroepl's Web Site at http://www.schroepl.net/projekte/mod_gzip/browser.htm

1 POD Error

The following errors were encountered while parsing the POD:

Around line 31:

Non-ASCII character seen before =encoding in '·Apache::Compress'. Assuming CP1252