
On Tue, Jun 14, 2011 at 12:06 PM, Michael Snoyman
On Tue, Jun 14, 2011 at 9:55 PM, David Pollak
wrote: On Tue, Jun 14, 2011 at 11:50 AM, Michael Snoyman
wrote: I think the reason we didn't include the header is because, when I wrote it, I didn't know of a cross-platform way to get file sizes. Now that I know about unix-compat, this seems like a reasonable thing to add. Anyone know a reason we *shouldn't* do this?
In Lift, we do not automatically populate the Content-Length for generic BLOB responses because if the response is streaming, then we have to strictly evaluate the stream to determine the length. For returning
large
items (e.g., a 2 GB AVI), this can cause issues. We break the Response types into "In Memory" which are strict and we include the Content-Length header, but for responses that are not strict, it's up to the coder.
My 2 cents.
Nubis was referring specifically to sending files. Yesod has a similar breakdown where some datatypes (strict ByteStrings for instance) have a content-length attached, while others (lazy ByteStrings) do not. We achieve this via the optional Int argument in the ContentBuilder constructor[1]. Various instances of ToContent simply handle this differently.
In the case of files, we would either use the length specified by the FilePart parameter, or simply get the file size from the file system.
Sorry for the newbie mistake and thanks for correction me! Rock on.
Michael
[1] http://hackage.haskell.org/packages/archive/yesod-core/0.8.2/doc/html/Yesod-...
Michael
On Tue, Jun 14, 2011 at 8:16 PM, Nubis
wrote: Hi guys, Just wanted to give you a heads up that yesod's sendFile is not
the Content-Length header, which 'breaks' some proxies and load balancers. (in our case, amazon elastic load balancer). I don't know if that's by design, I'm not 100% sure but not setting
header would be only useful for 'long pooling' of binary files for doing some sort of hackish http streaming, which I don't think is yesod's purpose anyways :) A workaround is setting the Content-Length header before calling sendFile, I guess it may be something easy to add, I was going to propose a patch that just wraps the current implementation in a do block that sets the header, but then I noticed a number of optimizations being made that hint
setting the there
should be a 'better' way.
cheers! ----nubis :)
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
_______________________________________________ web-devel mailing list web-devel@haskell.org http://www.haskell.org/mailman/listinfo/web-devel
-- Lift, the simply functional web framework http://liftweb.net Simply Lift http://simply.liftweb.net Follow me: http://twitter.com/dpp Blog: http://goodstuff.im
-- Lift, the simply functional web framework http://liftweb.net Simply Lift http://simply.liftweb.net Follow me: http://twitter.com/dpp Blog: http://goodstuff.im