Evening all,

I'm encountering an odd issue with HttpClient 4.0b2 and HttpCore 4.0 GA.
Sending a fairly benign request to a server running JIRA is causing
HttpClient to throw a ProtocolException with the message "The server failed
to respond with a valid HTTP response" after waiting 30 seconds. 30 seconds
is incidentally the connection and query timeout I defined in the HttpClient
parameters.

It looks to me like the HttpClient is not recognising that the server has
responded completely. The headers being sent back from the server look okay
to me.

A tcpdump capture of the communication that triggered the error is shown
below, alongside a stacktrace from the application, and the options I set on
the ThreadSafeClientConnManager and HttpClient.

Any suggestions would be much appreciated.

Thanks again,

Sam


#### TCPDUMP CAPTURE OF HTTP COMMUNICATION ####

GET /JRA/s/330/1/_/styles/combined.css HTTP/1.1
accept: */*
referer:
http://jira.company.com/JRA/secure/ViewUserIssueColumns!default.jspa
accept-language: en-gb
ua-cpu: x86
if-modified-since: Sun, 12 Apr 2009 06:41:46 GMT
if-none-match: "1239518506000"
user-agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR
1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648;
.NET CLR 3.5.21022; InfoPath.2)
Host: jira.company.com:80
pragma: no-cache
Connection: Keep-Alive
Cookie: ARPT=YZPUQIS10.132.147.33CKMLK;
JSESSIONID=xpLZJj7fly2Ymnnmp4TgC2YyPnG4ZF684hWqZbvTGwHMqTkzKwxG!119119743

HTTP/1.1 304 Not Modified
Cache-Control: private
Date: Mon, 13 Apr 2009 22:39:59 GMT
Transfer-Encoding: chunked
Content-Type: text/css; charset=UTF-8
Expires: Thu, 11 Apr 2019 22:39:59 GMT
Last-Modified: Sun, 12 Apr 2009 06:41:46 GMT
ETag: "1239518506000"
X-Powered-By: Servlet/2.4 JSP/2.0

0000



#### STACKTRACE FROM APPLICATION (Note 30 second delay between making
request and the exception) #####

[#|2009-04-13T23:40:00.010+0100|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=24;_ThreadName=httpSSLWorkerThread-8080-3;|
Mon Apr 13 23:40:00 BST 2009|com.a.b.c.ProxyFilter|D|Forwarding GET
/JRA/s/330/1/7/_/styles/global.css|#]

[#|2009-04-13T23:40:31.449+0100|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=23;_ThreadName=httpSSLWorkerThread-8080-2;|
Mon Apr 13 23:40:31 BST 2009|com.a.b.c.ProxyFilter|E|ClientProtocolException
thrown when fetching /JRA/s/330/1/_/includes/js/combined-javascript.js|#]

[#|2009-04-13T23:40:31.451+0100|WARNING|sun-appserver9.1|javax.enterprise.system.stream.err|_ThreadID=23;_ThreadName=httpSSLWorkerThread-8080-2;
_RequestID=6d978520-35f4-45ac-a79e-bce8ae9712e6;|org.apache.http.client.ClientProtocolException
        at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
        at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
        at com.a.b.c.ProxyFilter.processProxyRequest(ProxyFilter.java:175)
        at com.a.b.c.ProxyFilter.doFilter(ProxyFilter.java:108)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at com.a.b.c.UserInjectFilter.doFilter(UserInjectFilter.java:52)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at
com.sun.identity.agents.filter.AmAgentBaseFilter.allowRequestToContinue(AmAgentBaseFilter.java:126)
        at
com.sun.identity.agents.filter.AmAgentBaseFilter.doFilter(AmAgentBaseFilter.java:75)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
        at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: org.apache.http.ProtocolException: The server failed to respond
with a valid HTTP response
        at
org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:93)
        at
org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:210)
        at
org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:271)
        at
org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
        at
org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
        at
org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:292)
        at
org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:126)
        at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410)
        at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
        ... 37 more
|#]



##### HTTP CLIENT SETTINGS ######

HttpConnectionParams.setTcpNoDelay(params, true);
HttpConnectionParams.setLinger(params, 30);
HttpConnectionParams.setConnectionTimeout(params, 30000);
HttpConnectionParams.setSoTimeout(params, 30000);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpClientParams.setRedirecting(params, false);
HttpProtocolParams.setUseExpectContinue(params, false);
ConnManagerParams.setMaxConnectionsPerRoute(params, new
ConnPerRouteBean(50));
ConnManagerParams.setMaxTotalConnections(params, 500);
HttpClientParams.setCookiePolicy(params,
CookiePolicy.BROWSER_COMPATIBILITY);

Reply via email to