Skip to content

plack/Plack-Middleware-Deflater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Plack::Middleware::Deflater - Compress response body with Gzip or Deflate

SYNOPSIS

use Plack::Builder;

builder {
  enable sub {
      my $app = shift;
      sub {
          my $env = shift;
          my $ua = $env->{HTTP_USER_AGENT} || '';
          # Netscape has some problem
          $env->{"psgix.compress-only-text/html"} = 1 if $ua =~ m!^Mozilla/4!;
          # Netscape 4.06-4.08 have some more problems
           $env->{"psgix.no-compress"} = 1 if $ua =~ m!^Mozilla/4\.0[678]!;
          # MSIE (7|8) masquerades as Netscape, but it is fine
          if ( $ua =~ m!\bMSIE (?:7|8)! ) {
              $env->{"psgix.no-compress"} = 0;
              $env->{"psgix.compress-only-text/html"} = 0;
          }
          $app->($env);
      }
  };
  enable "Deflater",
      content_type => ['text/css','text/html','text/javascript','application/javascript'],
      vary_user_agent => 1;
  sub { [200,['Content-Type','text/html'],["OK"]] }
};

DESCRIPTION

Plack::Middleware::Deflater is a middleware to encode your response body in gzip or deflate, based on Accept-Encoding HTTP request header. It would save the bandwidth a little bit but should increase the Plack server load, so ideally you should handle this on the frontend reverse proxy servers.

This middleware removes Content-Length and streams encoded content, which means the server should support HTTP/1.1 chunked response or downgrade to HTTP/1.0 and closes the connection.

CONFIGURATIONS

  • content_type

      content_type => 'text/html',
      content_type => [ 'text/html', 'text/css', 'text/javascript', 'application/javascript', 'application/x-javascript' ]
    

    Content-Type header to apply deflater. if content-type is not defined, Deflater will try to deflate all contents.

  • vary_user_agent

      vary_user_agent => 1
    

    Add "User-Agent" to Vary header.

ENVIRONMENT VALUE

  • psgix.no-compress

    Do not apply deflater

  • psgix.compress-only-text/html

    Apply deflater only if content_type is "text/html"

  • plack.skip-deflater

    Skip all Deflater features

Compare psgix.no-compress with plack.skip-deflater

If no-compress is true, PM::Deflater skips gzip or deflate. But adds Vary: Accept-Encoding and Vary: User-Agent header. skip-deflater forces to skip all PM::Deflater feature, doesn't allow to add Vary header.

LICENSE

This software is licensed under the same terms as Perl itself.

AUTHOR

Tatsuhiko Miyagawa

SEE ALSO

Plack, http://httpd.apache.org/docs/2.2/en/mod/mod_deflate.html