On Fri, Sep 30, 2011 at 4:51 AM, André Warnier <a...@ice-sa.com> wrote:
> Rainer Jung wrote:
>>
>> On 29.09.2011 22:49, rapponcape wrote:
>>>>
>>>> Aha, the client is using HTTP 1.0 and not 1.1. This could be one reason
>>>> for Tomcat closing the connection. See below.
>>>>
>>> When I reconfigure and put Apache in front of Tomcat and use a jkmount
>>> with
>>> AJP connector, response is normal and without error.  Appears to only
>>> happen
>>> when tomcat is standalone.
>>
>> Could be the answer is small enough, that Apache can buffer it and send
>> without chunked encoding. Don't know.
>>
>>>>> You see: no Content-Length header. I
>>>
>>> I do see Content-Length in the POST header
>>
>> You cut out the relevant part. I was talkingabout the Tomcat answer, you
>> saw it in the client request. That's now the same ;)
>>
>> Rainer
>>
> rapponcape,
>
> to clarify maybe the discussion and answers which you have received so far :
>
> 1) Your clients, in their requests, indicate a protocol level HTTP/1.0.
> If you read RFC2616 (HTTP 1.1), you will see that for HTTP 1.0, the
> persistent ("keep-alive") kind of connection is not very well defined.
> Keep-alive connections are only well-defined and supported in HTTP/1.1.
>
> Consequently, a HTTP/1.1-capable server (like Apache httpd and Tomcat), upon
> receiving a request specifying HTTP/1.0, cannot assume that the client
> really knows how to handle this properly, and /can/ decide to not honor the
> desire for keep-alive connections, and close the connection after every
> response.
> In this case, it appears that Apache httpd may follow one behaviour, and
> Tomcat the other.
> Other webservers may choose to do either one or the other.
> (Both behaviours are allowed by the RFC).
>
> The point is : if your client wants to increase its chances to get a
> keep-alive connection, then it should use HTTP/1.1, not HTTP/1.0.
>
> 2) When your client connects to Apache httpd, and httpd serves as a proxy to
> Tomcat, there are two independent connections :
>
> client <-- (1) --> Apache httpd + mod_jk <-- (2) ---> Tomcat
>
> It is allowed for (Apache httpd + mod_jk) to make a proxy connection (2) to
> Tomcat using a HTTP 1.1 protocol level, allowing for persistent connections,
> even if on the other side (1) the connection is HTTP/1.0 and not persistent.
> (In fact, here this is pretty much irrelevant, since the connection (2) is
> made under the AJP protocol, not HTTP.  And mod_jk will always try to use
> persistent connections to Tomcat, for efficiency).
>
> So it is very possible that your client sees a different behaviour when it
> talk to Apache httpd, compared to when it talks to Tomcat directly.
> But that is because your client indicates that it wants a protocol level
> HTTP/1.0.
>
> So, in summary :
> - Apache httpd and Tomcat are right, because they follow the RFC
> - your client is wrong, inasmuch as it has an unfounded expectation, using
> HTTP/1.0, to actually get a persistent connection when it asks for it.
>
> It should be added that, even under HTTP/1.1, there is no guarantee for the
> client that when it asks for a persistent connection, it will actually get
> one.  The HTTP 1.1 server can still decide to close the connection after the
> response, for a variety of reasons.
> But let's say that it would have a much better chance.
>
> And let's leave the question of chunked responses for the next step.

Very helpful detail.

It would be nice to see Tomcat react similarly to how Apache reacts to
HTTP/1.0 messages that specify Keep-Alive and Content Length.  From
Apache docs...
"For HTTP/1.0 clients, Keep-Alive connections will only be used if
they are specifically requested by a client. In addition, a Keep-Alive
connection with an HTTP/1.0 client can only be used when the length of
the content is known in advance."

Thanks all.
-wr

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to