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);
