[Mongrel] Transfer-Encoding: Chunked

Zachary Roetemeyer zprime at gmail.com
Mon Feb 18 07:39:02 EST 2008


The upload is coming from a mobile device with J2ME, and it does this  
by default with anything over 2K, and apparently there's no way to  
turn it off.

On Feb 17, 2008, at 8:18 PM, Zed A. Shaw wrote:

> On Fri, 15 Feb 2008 14:35:04 -0600
> Zachary Roetemeyer <zprime at gmail.com> wrote:
>
>> I'm working with someone who is having issues with a Transfer-
>> Encoding: Chunked upload. With out a content-length set in the
>> request, everything is treating the content length as 0 and the file
>> is more or less getting sent to the bit bucket.  Does anyone have any
>> experience with this kind of issue?  We started proxying with
>> nginx(returned a HTTP Error 411), then we tried to directly expose a
>> mongrel and ended up getting strange results, and errors in the
>> mongrel logs.  The client is uploading with a mobile phone using  
>> J2ME.
>
> Uh, you aren't allowed to set a Content-Length AND use CE in the same
> request.  That would let the two contradict so it's an RFC violation.
> Actually, WebLogic makes this mistake and we had to school them about
> it until they told us to turn it off.  (WebLogic is such a piece of
> shit).
>
> My RFC knowledge on CE is rusty since I banished that shitty part of
> HTTP from my mind when I implemented it in RFuzz, but my thoughts are:
>
> 1) CE wasn't designed for clients to upload, since no browser does it.
> 2) It's originally for a server to send periodic parts of a request
> without having to know it's total final size.
> 3) Anyone doing a CE as a client is seriously screwing with the RFC  
> and
> really exercising the corners of it for no apparent reason since CE
> isn't needed by a client (the client knows the size, or better).
> 4) This puts a burden on the server to process the CE as it comes
> over, which has the same problems as mime boundaries but with a more
> horribly designed part of the RFC.
> 5) My recommendation is that you just don't do this.  The value add  
> for
> a client (or even modern servers really) is quite minimal.
>
> Now, how you go about implementing it:
>
> A) Read up on how to write a Mongrel handler.
> B) Register it at the front of your web app or create a separate  
> server
> that runs just mongrel (probably your best if you want any kind of
> performance).
> C) Your handler would detect the CE via the normal headers and such,
> and then process the final request body as it comes in for each chunk.
> D) This might involve subclassing the Http processing parts that  
> handle
> the body and doing a bit of other hacking, and it's seriously fucking
> dumb because after that you've gotta process mime boundaries and other
> stuff, which will punish your server heavily.
>
> Enjoy!
>
> -- 
> Zed A. Shaw
> - Hate: http://savingtheinternetwithhate.com/
> - Good: http://www.zedshaw.com/
> - Evil: http://yearofevil.com/
> _______________________________________________
> Mongrel-users mailing list
> Mongrel-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/mongrel-users

Zachary Roetemeyer
zprime at gmail.com





More information about the Mongrel-users mailing list