Category: Browsers

HTTP Optimizations

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.
More details on browser implementations, http://en.wikipedia.org/wiki/HTTP_pipelining
  • IE 8 doesnt support Pipelining
  • Mozilla does, but is disabled by default
  • Chrome supports for HTTP but not for HTTPS
Some more, here, http://www.igvita.com/2011/10/04/optimizing-http-keep-alive-and-pipelining/
Advertisements

Chrome DNS prefetching & TCP pre-connect

http://www.igvita.com/2012/06/04/chrome-networking-dns-prefetch-and-tcp-preconnect/

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