https://issues.apache.org/bugzilla/show_bug.cgi?id=45073

           Summary: APR doesn't support pipelined requests and per
                    connection limits aren't enforced
           Product: Tomcat 6
           Version: 6.0.16
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Connectors
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


The APR connector doesn't support pipelined requests. This is because the
InternalAPRInputBuffer is flushed between requests and may be reassigned to a
different socket. This could loose a pipelined request.

Pipelined requests are defined in RFC2616, sec 8.1.2.2. I have attached a
simple python test script. The behavior is different depending on whether the
APR or internal Http11 connector is used.

There is no-requirement for 2 requests to be in different packets and if
TCP_NODELAY is _NOT_ set they may well be coalesced into the same packet by the
Nagle algorithm. This means that they will both be read into the InputBuffer
together but the second will be discarded when the first request is completed.

The connector unable to enforce the maxKeepAliveRequests configuration
parameter. Currently this works to enable or disable keep alives but cannot
enforce anything else because the current limit (number remaining) for this
socket isn't passed around between the poller, sendfile, worker etc.

<opinion>
Probably the correct fix here is to assign the InternalAPRInputBuffer and
InternalAPROutputBuffer to the connection in the acceptor and then pass these
around for the life of the socket. We can also add the limits and statistics to
these buffers. In this way, if a second request is read up into the buffer with
the first, it will still be there when the first request is completed.
</opinion>


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to