On Sat, 2002-10-19 at 17:43, Dan Kegel wrote:
> I'm writing a load test client, and want to make sure I handle
> pipelined requests right.  I installed Red Hat 8.0 and its Apache 2.0,
> and made an html file that referenced all the .gif's in /icons.
> Fetching that page with Mozilla, I do indeed observe pipelined requests
> and responses.
> 
> I have seen pipelined requests in which a particular HTTP request header
> line starts in one TCP segment and ends in another, but I have
> not yet seen the same thing for HTTP response lines from Apache.
> Does Apache 2.0 do anything special to prevent that (presumably
> to avoid triggering bugs in clients that assume that HTTP response
> lines aren't split across successive read()'s)?

2.0 doesn't actively try to prevent this.  I think it's
just a side-effect of the output code doing a sendfile call
per response: for the second response in the pipeline, we
end up doing a new write+sendfile for the response header
and the content on Linux, or a new sendfilev for the header
and content on Solaris.  We could probably consolidate multiple
responses into a single packet (which could result in some
response headers spanning packet boundaries) if we mmap'ed
the response files and did a writev, but that would hurt
performance on some platforms.  A better alternative, I
suppose, would be to use sendfilev to write multiple responses
at once on Solaris, or keep the connection TCP_CORK'ed across
multiple sendfile calls on Linux.

Brian


Reply via email to