I am writing a HTTP proxy server and I noticed that many clients use the “Connection: Keep-Alive” header to keep a persistent connection. Is it possible that the client sends another HTTP request before the server processes the first?
For example, the client sends “GET / HTTP/1.1” but before the server has a chance to respond, the client sends “GET /favicon.ico HTTP/1.1”. Is that possible? Or will the client pause for the response before sending the second request?
Also, when using a persistent connection, is it safe to assume all requests through that connection will have the same “Host: ” header?
Yes, it is possible for the client to pipeline requests. (See http://en.wikipedia.org/wiki/HTTP_pipelining).
Turning your last question around… it would not be safe for a client to assume that requests to multiple hosts would be served by a single pipeline. There may be no specs that directly address your question on the Host: header, but it’s a safe bet they’ll be the same.