It appears from the symptoms that there are malformed http requests over an http persistant connction. One cause of this is that the previous request to the server was malformed with regard to the content-length header not matching the number of bytes sent, a simple example would be the client set the content-length to 10 bytes but 11 bytes were sent, the extra byte will now be part of the next http request and could throw off the parsing of the next request and cause the server to return a bad request error.
Couple of things to help isolate the issue.
1. For a test disable http persistant connections on the server. Setting is in the http tab. After disabling persistant connections see if the problem still occurs. If problem does not occur then it is likely a malformed request with extra data, if it still occurs, then it will be necessary to get wire traces of what is going on to understand the issue better.
2. With regard to the http messages "waiting for session", taking an NSD at the time will help idenify what code is executing that is hanging the thread.
It may be necessary to raise a PMR for this because it appears it will take additional investigation to find the root cause.