HTTP 1.0 required strict “single request per connection” model, HTTP 1.1 reversed this behavior: by default, an HTTP 1.1 client and server keep the connection open, unless the client indicates otherwise (via Connection: close header).
Some key aspects to ensure:
- Connection reuse: Ensure that your connection is not closed at end of each request, check header “Connection close”
- Pipelining: Pipelining allows us to break the strict “send a request, wait for response” model. Instead, we can dispatch multiple requests, in parallel, over the same connection, without waiting for a response in serial fashion.
- IE 8 doesnt support Pipelining
- Mozilla does, but is disabled by default
- Chrome supports for HTTP but not for HTTPS
Excerpts from above website:
Each browser tab in Chrome is its own isolated process, which gives us great isolation and many security benefits.
An average DNS lookup takes 60~120ms, followed by a full round-trip (RTT) to perform the TCP handshake – combined, that creates 100-200ms of latency before we can even send the request!
- chrome://network-action-predictor – omnibox predictor stats (tip: check ‘Filter zero confidences’)
- chrome://net-internals/#sockets – current socket pool status
- chrome://net-internals#dns – Chrome’s in-memory DNS cache
- chrome://histograms/DNS – histograms of your DNS performance
- chrome://dns – startup prefetch list and subresource host cache