init
This commit is contained in:
55
wcmtools/lib/Apache/CompressClientFixup.pm
Executable file
55
wcmtools/lib/Apache/CompressClientFixup.pm
Executable file
@@ -0,0 +1,55 @@
|
||||
# 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;
|
||||
Reference in New Issue
Block a user