I originally misunderstood the issue. I thought the problem was with Rocket. web2py.com runs on Apache+mod_wsgi. In this case Apache decides on chunking, not web2py.
It is strange but I do not know what is the Apache policy in this respect. Massimo On Aug 12, 9:59 pm, Jonathan Lundell <[email protected]> wrote: > On Aug 12, 2010, at 5:13 PM, mdipierro wrote: > > > > > I looked at the Rocket web server: > > > 1) it always responds with HTTP/1.1 even if client is HTTP/1.0. I am > > not sure this is allowed. I think not. A response must follow a > > protocol that is same or lower then requested protocol > > 2) it seems Rocket responds with chunked encoding in two cases: a) the > > request was chunked; b) if the wsgi app returns a list with more than > > one element (web2py can do this but normally does not do it). > > > There is one caveat abdou 2) There is this code > > > def write(self, data, sections=None): > > """ Write the data to the output socket. """ > > .... > > if not self.headers_sent: > > self.send_headers(data, sections) > > > If it happens that self.send_headers(data, None) is called, it will > > force chunked-encoding. I do not see how that can happen but I cannot > > exclude since I do not see the logic behind calling send_headers in > > two places. > > What's odd is that we see the different cases on identical calls to the same > URL. > > I found the chunked logic a little confusing, probably because I don't really > understand what it's trying to do, or how it gets called. > > At least it seems easy to reproduce. > > At least in my tests (through web2py.com), I'm seeing Apache. Is that > mod_proxy? > > > > > On Aug 12, 12:48 pm, Thadeus Burgess <[email protected]> wrote: > >> In my testings the errors were actually 500 internal server errors, > >> not content length issues. These pages were dynamic in that they > >> returned information from the database, but it was always the exact > >> same 10 records. The content length was not one of the reported failed > >> requests types. I can even replicate this with the welcome app, just > >> add a friends table, and a sqltable on the default/index page, insert > >> some records, then run ab on the index page, it always return sthe > >> same thing, but will generate roughly 15% error ratios not related to > >> content length (since it stays the same) > > >> -- > >> Thadeus > > >> On Thu, Aug 12, 2010 at 12:27 PM, mdipierro <[email protected]> > >> wrote: > >>> I think I figure it. It is not a bug in web2py. The Content-Length is > >>> not computed by web2py but it is computed by the web server and it is > >>> computed correctly. > > >>> The length is actually different at each request. > > >>> This is because: > >>> 1) in forms it contains the CSRF token with is a uuid and is different > >>> at each request > >>> 2) forms that contain a date may have different rounding for seconds > >>> 3) pages with display [request], [response], etc also contain datetime > >>> info which have different length at every request > > >>> The second link Jonathan posted says: > > >>> "Quite often you may see in the statistics "Failed requests: 5" or > >>> similar, followed by a list of the types of failure: "(Connect: 0, > >>> Receive: 0, Length: 5, Exceptions: 0)". If the only type of failure > >>> that actually occurred is 'Length' then don't be alarmed. This simply > >>> means that each request (for the same URL) returned a different length > >>> response, which ab regards as suspicious. However it's perfectly > >>> normal for dynamic webpages, especially if they include the time or > >>> other very dynamic data on the page. " > > >>> This our case. > > >>> Case closed? > > >>> Massimo > > >>> On Aug 12, 12:00 pm, mdipierro <[email protected]> wrote: > >>>> You are the man. > > >>>> For the page I am considering the fail requests are not a real failure > >>>> but declare a content-length of 19383 (wrong) instead of 19384 > >>>> (correct). Let's continue investigate... > > >>>> Massimo > > >>>> On Aug 12, 11:53 am, Jonathan Lundell <[email protected]> wrote: > > >>>>> On Aug 12, 2010, at 8:44 AM, David Marko wrote: > > >>>>>> Failed requests: 19 > >>>>>> (Connect: 0, Receive: 0, Length: 19, Exceptions: 0) > > >>>>> Even more reassurance: > > >>>>>http://stackoverflow.com/questions/1512304/failed-requests-by-length-... > > >>>>>http://alwaysthecritic.typepad.com/atc/2009/04/apache-bench-notes.html > > >>>>> The length variation should be checked, of course, but it may well be > >>>>> harmless. > > >>>>> If the length variation is under our control (cookie format, maybe?), > >>>>> perhaps we could make an effort to make it the same.

