Re: Pipelining in HTTP 1.1

On Mar 30, 2009, at 2:27 PM, Preethi Natarajan (prenatar) wrote:
> I would like your comments on the following. This is w.r.t. HTTP  
> over SCTP (draft-natarajan-http-over-sctp-01) and I am trying to  
> comprehend "pipelining" in the context of HTTP 1.1.
>
> From Section 8.1.2.2 of RFC2616:
>
> "A client that supports persistent connections MAY "pipeline" its  
> requests (i.e., send multiple requests without waiting for each  
> response). A server MUST send its responses to those requests in  
> the same order that the requests were received."
>
> We (SCTP folks) assume that "persistent connection" in this section  
> refers to a persistent _transport_connection. When multiple HTTP  
> requests and responses are sent back-to-back on a persistent  
> transport connection, the HTTP transactions are pipelined.
>

Yes; we already plan on making that clear in HTTPbis part 1.
This requirement should be just a statement that responses are
associated to requests by their order in an otherwise untagged
stream.  Other transport protocols might supply their own
mechanism for request-response association, or even extend HTTP
such that the request/response contains some form of matching ID.

> In our HTTP over SCTP streams design, we recommend transmitting  
> HTTP requests/responses over different SCTP streams, but note that  
> these reqeusts/responses are transmitted back-to-back within an  
> SCTP transport connection. I.e., the HTTP transactions are  
> pipelined across multiple streams of an SCTP transport connection  
> but are not pipelined within an SCTP stream. I am tempted to say  
> that this design still confirms to the "pipelining" definition as  
> per RFC2616.
>

I don't think you will need to worry about such conformance
except in the case where a TCP connection stream of pipelined
requests is being proxied to a set of SCTP streams.  In that case,
there is an implied expectation of ordering on the client regarding
state-changing requests that must be respected by the proxy.

The user agent needs to be in control of the order in which some
requests are handled by the origin server when there exists a
state-changing (unsafe) method in the stream because it is common
for a user agent to modify a resource and then immediately request
the resulting representation as it should appear after the modification
has been applied.  It would be annoying if that GET was reordered by
the SCTP proxy such that it was handled before the modification.

A transport change like SCTP is free to multiplex any sequence of
safe (GET/HEAD/OPTIONS/...) requests however it likes, assuming that it
has some way of re-associating the request-response pair, but it must
wait until each of the previous requests have received at least a
response status prior to initiating an unsafe request
(PUT/PATCH/DELETE/POST/...) from the same source.

I am somewhat surprised that your HTTP over SCTP spec allows channels
to be reused.  Is there a significant cost associated with channel
allocation?  TCP persistent connections added a huge amount of
complexity and fairness/denial-of-service issues to HTTP servers
just to avoid the side-effects of TCP slow-start and connection
negotiation.  I was hoping that an SCTP channel could be handled
in a send-and-forget mode, since that is more efficient for servers
that aren't designed around event handlers.
Does the sctp_sendmsg/sctp_recvmsg API solve those problems?

....Roy

Received on Tuesday, 31 March 2009 00:05:42 UTC