.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Plack::Middleware::Deflater 3pm" .TH Plack::Middleware::Deflater 3pm "2013-09-12" "perl v5.18.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Plack::Middleware::Deflater \- Compress response body with Gzip or Deflate .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Plack::Builder; \& \& builder { \& enable sub { \& my $app = shift; \& sub { \& my $env = shift; \& my $ua = $env\->{HTTP_USER_AGENT} || \*(Aq\*(Aq; \& # 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\e.0[678]!; \& # MSIE (7|8) masquerades as Netscape, but it is fine \& if ( $ua =~ m!\ebMSIE (?:7|8)! ) { \& $env\->{"psgix.no\-compress"} = 0; \& $env\->{"psgix.compress\-only\-text/html"} = 0; \& } \& $app\->($env); \& } \& }; \& enable "Deflater", \& content_type => [\*(Aqtext/css\*(Aq,\*(Aqtext/html\*(Aq,\*(Aqtext/javascript\*(Aq,\*(Aqapplication/javascript\*(Aq], \& vary_user_agent => 1; \& sub { [200,[\*(AqContent\-Type\*(Aq,\*(Aqtext/html\*(Aq],["OK"]] } \& }; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Plack::Middleware::Deflater is a middleware to encode your response body in gzip or deflate, based on \f(CW\*(C`Accept\-Encoding\*(C'\fR \s-1HTTP\s0 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. .PP This middleware removes \f(CW\*(C`Content\-Length\*(C'\fR and streams encoded content, which means the server should support \s-1HTTP/1.1\s0 chunked response or downgrade to \s-1HTTP/1.0\s0 and closes the connection. .SH "CONFIGURATIONS" .IX Header "CONFIGURATIONS" .IP "content_type" 4 .IX Item "content_type" .Vb 2 \& content_type => \*(Aqtext/html\*(Aq, \& content_type => [ \*(Aqtext/html\*(Aq, \*(Aqtext/css\*(Aq, \*(Aqtext/javascript\*(Aq, \*(Aqapplication/javascript\*(Aq, \*(Aqapplication/x\-javascript\*(Aq ] .Ve .Sp Content-Type header to apply deflater. if content-type is not defined, Deflater will try to deflate all contents. .IP "vary_user_agent" 4 .IX Item "vary_user_agent" .Vb 1 \& vary_user_agent => 1 .Ve .Sp Add \*(L"User-Agent\*(R" to Vary header. .SH "ENVIRONMENT VALUE" .IX Header "ENVIRONMENT VALUE" .IP "psgix.no\-compress" 4 .IX Item "psgix.no-compress" Do not apply deflater .IP "psgix.compress\-only\-text/html" 4 .IX Item "psgix.compress-only-text/html" Apply deflater only if content_type is \*(L"text/html\*(R" .IP "plack.skip\-deflater" 4 .IX Item "plack.skip-deflater" Skip all Deflater features .SS "Compare psgix.no\-compress with plack.skip\-deflater" .IX Subsection "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. .SH "LICENSE" .IX Header "LICENSE" This software is licensed under the same terms as Perl itself. .SH "AUTHOR" .IX Header "AUTHOR" Tatsuhiko Miyagawa .SH "SEE ALSO" .IX Header "SEE ALSO" Plack,