Hi Cris,

> Excellent information. Thank you!
> 
> Is there a way to create a split point where sendFile will handle files of
> certain mime types (or all mime-types except for an exclusion list of mime
> types) and/or of certain sizes while compression will handle files of other
> mime-types and/or certain sizes?
> 
> Both settings have a minimum file size that engages their mechanism but to
> set up a division of labor I would think we would need all of
> include/exclude and max/min for both sendfile() and compression. Again, I
> could be missing something obvious by staring at the problem too long.
> 
> @André and the rest of the listserv, In your opinions-- thinking about the
> web site consumer's experience, and having to choose either send sendfile()
> or compression-- is the juice worth the squeeze so-to-speak keeping
> sendfile() and sending uncompressed files, or is the better choice to
> enable compression at the expense of direct static file access and save
> bandwidth?
> 

There may be a different aspect!

Are you servicing the file on an SSL and login protected website?

Then you should be aware of the BREACH attack http://breachattack.com/ and 
restrict the compressed resources wisely.
Basically the authors say: do not use compression.

Best regards

Peter

> 
> 
> 
> On Tue, Apr 18, 2017 at 9:08 AM, André Warnier (tomcat) <a...@ice-sa.com>
> wrote:
> 
> > On 18.04.2017 14:50, Chris Gamache wrote:
> >
> >> Using tomcat 8.0.43 ...
> >>
> >> I'm grappling with GZip compression options. Historically, I've used a
> >> custom GZip filter and that's been fine for the most part. If the file
> >> being served is under 50K the filter would compress it in memory and send
> >> it out. If the file is over 50K, it would connect the OutputStream to a
> >> GZipOutputStream rather than compressing the whole thing in memory and
> >> then
> >> sending it out from there. When that happens it doesn't send a
> >> Content-Length header. This is fine for most browsers. Safari has a
> >> problem
> >> with this and will decline to receive the file. In looking at the GZip
> >> filter I've been using, it's kind-of naive-- there must be a more
> >> intelligent compression option built into tomcat by now, right?
> >>
> >> To enable compression, I set `compression="on"` in my <Connector/> element
> >> in my server.xml file. There is on sticking point-- if sendFile is
> >> available (asynchronous file-sending by the DefaultServlet using NIO) it
> >> will trump compression by default. I can turn off sendFile, and browsers
> >> report that they are receiving compressed files. So it seems like an
> >> all-or-nothing situation where compression and sendFile are mutually
> >> exclusive. There are minimum file size settings for both options, but no
> >> max file size settings so I can't say "use sendFile for files under 50K
> >> and
> >> compression for files above 50K" because sendFile will always trump
> >> compression.
> >>
> >> I think the idea of sending out static files asynchronously is fantastic.
> >> I
> >> also want my pages to load faster by sending less data.
> >>
> >> I figure the smart people who work on tomcat know a whole lot more about
> >> this stuff than I do. They must have had a reason to prioritize sendFile
> >> over compression, or the expert tomcat administrators have figured out a
> >> way to balance the two.
> >>
> >> Maybe I've been staring at the problem too long, but I can't figure it
> >> out.
> >>
> >> So, is it advisable turn of sendFile to engage compression? Or, is there a
> >> combination of settings that will let me best use them both?
> >>
> >>
> > For what it's worth :
> > sendfile() is a way by which the (web) application can just point the OS
> > to a static file on disk, and say "send this". And the sendfile logic in
> > the OS takes care of the rest, in the most efficient way possible for that
> > OS, and the call returns ok to your application right away, even possibly
> > before the sendfile() action has completed.
> > The sticky point here is "a static file on disk".
> > So if you want to send back a gzipped file, then the only solution is to
> > first create that gzipped version as a file on disk, and then use
> > sendfile() on that gzipped version.
> > And then, presumably, you'd want to "clean up" these gzipped versions at
> > some point.
> > Which cannot happen right after you have called sendfile(), because you do
> > not really know when it will be done actually sending the file.
> > So it is not really a "priority" issue, it is that these are different
> > things, and that sendfile() really only works on a file, not on dynamic
> > output from a webapp.
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail: users-h...@tomcat.apache.org
> >
> >
>

Reply via email to