Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
gzip/deflate content encoding middleware for Plack
Perl
branch: master

This branch is 2 commits behind miyagawa:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/Plack/Middleware
t
xt
.gitignore
.shipit
Changes
MANIFEST
MANIFEST.SKIP
Makefile.PL
README

README

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"

    psgix.skip-deflater
        Skip all Deflater features

  Compare no-compress with 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>

Something went wrong with that request. Please try again.