Optimizing HTTP: Keep-alive and Pipelining