What causes a delay of 100 ms in initiating an HTTP connection?

Solution 1:

A network trace (e.g., Wireshark) will show if the delay is in waiting for a response. It would also point out other "detours" like the suggestion about DNS. Sounds like you may have done this already, but you didn't say.

Solution 2:

A different possibility: the Windows XP SP2 limit on outgoing half-open connections, which defaults to 10. I'm not sure how you see how many connections are in this state, but I believe that if this rate limiter kicks in it will show up in the error logs.

Half-open.com

Solution 3:

Does it have to do a DNS lookup for each request? Is that limiting the rate?

Solution 4:

Initial connection goes through fine but it is your second connection that is getting queued. I would review the client implementation in software, I don't know if more recent JDKs have made more changes but it used to be that even if you made individual HttpUrlConnections the underlaying Protocol Handler would still reuse the socket connection.

You should check in at StackOverflow and see if some of them have dealt with this issue before.