On Sun, Mar 22, 2009 at 09:23:49PM -0400, Philippe M. Chiasson wrote: > On 22/3/09 15:25, Louis-David Mitterrand wrote: > > Hi, > > > > I noticed something interesting with mod_deflate when serving binary > > content from a mason component: > > > > <%init> > > $m->clear_buffer(); > > $r->content_type("video/mp4"); > > $r->headers_out->add('Content-length' => -s $file); > > $r->sendfile($file); > > $m->abort(200); > > </%init> > > > > mod_deflate is enabled with the default: > > > > AddOutputFilterByType DEFLATE text/html text/plain text/xml > > > > and .md mason components have: > > > > AddType text/html .md > > > > But when I change the content-type from within the component mod_deflate > > doesn't seem to notice and keeps gzip'ing the video/mp4 output, which > > FlowPlayer doesn't appreciate. > > > > I certainly could disable mod_deflate and be on my merry way. > > > > But I thought I'd ask the modperl list (already posted to mason-users) > > whether this mod_deflate behaviour is expected and/or normal? > > Sounds like Mason runs exclusively in the PerlResponse phase, at which > point, AddOutputFilterByType has already decided if it should apply the > filter or not, so it's too late to change that. > > One easy way to disable mod_deflate from that point in time, from mason, > would be to do: > > $r->subprocess_env('no-gzip' => 1); > > Since from mod_deflate.c: > > /* some browsers might have problems, so set no-gzip > * (with browsermatch) for them > */ > if (apr_table_get(r->subprocess_env, "no-gzip")) { > ap_remove_output_filter(f); > return ap_pass_brigade(f->next, bb); > } > > Give it a try, this is untested!
And this works fine! Thank you. Another possible (less robust) solution is to add this to deflate.conf: SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary This only works if the $r->uri ends with .mp4 which in my case does because I use an explicit $r->path_info: /video.md/directory/file.mp4 "/directory/file.mp4" points to a directory hierarchy outside of the ServerRoot. Cheers, -- http://www.critikart.net