Hello.
I have just read Patrik Nilsson email about http-server-close and Jetty. Unfortunately I cannot reply to that email because I read it in the archives and I was not subscribed to the list.
We are facing a very similar problem using Tomcat 6.0.20 in the backend (and haproxy 1.4.2).
When we go direct (without haproxy) to the backend servers, these are the headers:
REQUEST:
GET http://ned.trabber.com/es/ HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application,
application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap,
application/x-shockwave-flash, */*
Accept-Language: es
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0;
SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30618; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: ned.trabber.com
RESPONSE:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Type: text/html;charset=UTF-8
Content-Language: es
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Tue, 30 Mar 2010 15:49:05 GMT
This means that the keep alive is working OK.
However, when we go through haproxy, this is the response:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Type: text/html;charset=UTF-8 Content-Language: es Content-Encoding: gzip
So the keepalive is not working in this case.
It seems to me that when http-server-close option is enabled, haproxy replaces the original request header "Connection: Keep-Alive" by "Connection: close". And this change is making Tomcat change its behavior: when it receives a "Connection: close" it does not use chunked transfer encoding. Instead, Tomcat replies with a "Connection: close" response header and a non-chunked response whose length is indicated by closing the connection.
I verified this by directly sending to the backend server the original request but with "Connection: close" instead of the original "Connection: keep-alive". This is the output:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Type: text/html;charset=UTF-8 Content-Language: es Content-Encoding: gzip
As you can see it is identical to haproxy output.
So my questions are:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 (bullet 5)
2) Would it be feasible for haproxy to "convert" the backend server response from "non-chunked" encoding to a chunked response ?
Thank you,
Óscar
Received on 2010/03/30 18:51
This archive was generated by hypermail 2.2.0 : 2010/03/30 19:00 CEST