0

We are facing an issue, where our IBM HTTP server is returning a '400 Bad Request' Error and we are unable to find the reason why.

The request is a SOAP request which is supposed to be served by a Tibco SOAP service, but the request is not reaching the Application (No logs for the same in Application logs) - and is being errored at the HTTP server level.

The HTTP server we use is only as a Proxy and just pass the request to the application.

From the access logs:

10.239.12.250 - - [17/Nov/2016:10:23:19 +0000] "POST /OnlineCheck HTTP/1.1" 400 - 300 "Java1.7.0_40" 300/300021637

When I checked the Error logs:

[Thu Nov 17 10:28:19 2016] [error] (70007)The timeout specified has expired: proxy: prefetch request body failed to [::1]:9876 (temp.adv.com) from 10.213.123.12

The error is returned 5 minutes after getting the request, as you can see from the logs.

Some points to be noted:

The error is only from one client (multiple clients use the same service) and they use a OSB/Weblogic for Load balancing

This happends only for 10-20 percent of the requests and is random. The same request when sent again by the Load Balancer (when it doesn't get any response after 2.5 minutes, the server responds properly)

I would like to know if there is any way of capturing what the error might be due to? What can be the possible reasons for the 400\Bad Request Error?

Chillax
  • 4,418
  • 21
  • 56
  • 91

1 Answers1

1

The error message means mod_proxy waited for the POST body and it was never transmitted by the client. Therefore the Content-Length or Transfer-Encoding: chunked sent by the client was invalid, resulting in the 400 status code.

You can uncomment the LoadModule for "mod_net_trace" to record the I/O done for these requests and see what kind of body was expected and confirm it was never available.

If you don't trust an internal view of what was transmitted, you can use a packet capture to confirm the same thing.

covener
  • 17,402
  • 2
  • 31
  • 45