Plack::Middleware::Deflater3pm
Compress response body with gzip or deflate
Usage
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 fineif ( $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"]] }};
Overview
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 => 1Add "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.
Releases
7 releases since Debian 7 (Wheezy); the text changed 3 times.