56 lines
1.4 KiB
Perl
Executable File
56 lines
1.4 KiB
Perl
Executable File
# modified from:
|
|
# http://devl4.outlook.net/devdoc/Dynagzip/ContentCompressionClients.html
|
|
|
|
package Apache::CompressClientFixup;
|
|
|
|
use 5.004;
|
|
use strict;
|
|
use Apache::Constants qw(OK DECLINED);
|
|
use Apache::Log();
|
|
use Apache::URI();
|
|
|
|
use vars qw($VERSION);
|
|
$VERSION = "0.01";
|
|
|
|
sub handler {
|
|
my $r = shift;
|
|
return DECLINED unless $r->header_in('Accept-Encoding') =~ /gzip/io;
|
|
|
|
my $no_gzip = sub {
|
|
$r->headers_in->unset('Accept-Encoding');
|
|
return OK;
|
|
};
|
|
|
|
my $ua = $r->header_in('User-Agent');
|
|
|
|
if ($r->protocol =~ /http\/1\.0/io) {
|
|
# it is not supposed to be compressed:
|
|
# (but if request comes via mod_proxy, it'll be 1.1 regardless of what it actually was)
|
|
return $no_gzip->();
|
|
}
|
|
if ($ua =~ /MSIE 4\./o) {
|
|
return $no_gzip->() if
|
|
$r->method =~ /POST/io ||
|
|
$r->header_in('Range') ||
|
|
length($r->uri) > 245;
|
|
}
|
|
if ($ua =~ /MSIE 6\.0/o) {
|
|
return $no_gzip->() if $r->parsed_uri->scheme =~ /https/io;
|
|
}
|
|
|
|
if ($r->header_in('Via') =~ /^1\.1\s/o || # MS Proxy 2.0
|
|
$r->header_in('Via') =~ /^Squid\//o ||
|
|
$ua =~ /Galeon\)/o ||
|
|
$ua =~ /Mozilla\/4\.7[89]/o ||
|
|
$ua =~ /Opera 3\.5/o ||
|
|
$ua =~ /SkipStone\)/o) {
|
|
return $no_gzip->();
|
|
}
|
|
|
|
if (($ua =~ /Mozilla\/4\.0/o) and (!($ua =~ /compatible/io))) {
|
|
return $no_gzip->();
|
|
}
|
|
}
|
|
|
|
1;
|