If you like reading HTTP specifications (http://www.faqs.org/rfcs/rfc2616.html), you're in good company. We do here at Port80 -- you'll find lots of little details. For example, read this:
Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy.
So, from this it should now make sense to you why browsers like Internet Explorer (good ol' IE) have limits on simultaneous connections -- in their case, two connections.
If you have a high speed connection, this connection limitation does not seem to make a lot of sense to you as an end-user, a browser, a site visitor, a Web-based app consumer... It slows you down.
On the flip side for a Web administrator, this sounds like a nice move on Microsoft’s part to avoid congestion and usage spike issues on the Web server. Given this connection limit, we have seen in production that both developers and even end-users are trying to skirt the rules.
In the case of the developers, they try to improve browser access speeds by making the make the browser think it is talking to another server. For example, if you have your main server at www.xyz.com and also use a server images.xyz.com, and then had your HTML pointing to fetch images from this server, you might increase the number of connections to four -- though the requests might not be optimally distributed.
A little analysis of Web pages though would show that a typical container page is (X)HTML -- and may have some linked CSS and/or JS and also a number of linked objects, typically GIF and JPEG images, to be fetched during a page parse. Ratio-wise, the number of image requests far outweighs the other objects, so to get optimal usage, you might want to have image1.xyz.com, image2.xyz.com, image3.xyz.com, etc. and then divide your image requests between the various servers so that you take advantage of the top-to-bottom IE page parse and your improved number of connections in doing so.... You don't need multiple servers to do this. In fact, you could have one physical server and many different virtual servers taking care of all this. The major downside is rewriting your
tags in HTML to reference these servers. You could have a tool do this (sounds like a potential w3compiler feature to me) or try to build it into your server-side programming environment.
Now, if you are an end-user, you can go and buy a Web acceleration utility that will tweak connection and network settings or discover some "magic" yourself. In IE, see (http://support.microsoft.com/kb/183110) for details on settings. It is a little easier to set in Firefox, just use the URL about:config and then find the network.http.max-persistent-connections-per-server setting. There are some other approaches you could play with as well, such as network.http.pipelining that we have discussed before (http://www.port80software.com/200ok/archive/2004/12/21/222.aspx).
So anyway, as in The Matrix, there are rules, but you can bend them, even break them, at times.