Internet Explorer 8 and Maximum Concurrent Connections

Michael Schwarz on Monday, July 21, 2008

As defined in 1999 (RFC 2616 [1]) "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. A proxy SHOULD use up to 2N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion."* Since developers are using AJAX or AJAX-like requests to update a Web page the http limits are discussed [2] more [3] and more [4].

Currently WinInet limits connections per server [5] with a registry setting (for both, http 1.1 and 1.0). You can simply change the value and have the possibility to connect to more than one server at the time. Other Web browser have limited the concurrent connections to other values. Opera lets you change the value through the Preferences dialog box, look under Advanced –> Network. Firefox users just type about:config in the address bar and hit enter. Then type connections into the filter field. The setting your looking for is network.http.max-persistent-connections-per-server.

Now, Internet Explorer 8 changes the maximum number of concurrent connections [6].aspx):

Insert table here...

What does this mean for end-users? Well, it is much easier for a client to initiate more than two downloads (in the past you had to open Internet Explorer again to start a new instance to get two more connections). You may expect higher number of downloads at the same time instead of several two-paired downloads on your Web server.

What about XMLHttpRequest? You’re now able to initiate up to 6 AJAX requests to the same Web server. Do you really need this? In my eyes running more than one AJAX request makes still no sense. The only benefit I see is that files included in the page (i.e. CSS, JavaScript,...) are downloaded faster as they can downloaded at the same time. Another thing that will be better are mouseover events that change images while an AJAX request is running.

Internet Explorer 8 includes two new read-only properties of the window [7] object that enable your server to determine the number of available connections on the client computer: window.maxConnectionsPerServer [8] (http 1.1) and window.maxConnectionsPer1_0Server [9] (http 1.0).

Read more details at Connectivity Enhancements in Internet Explorer 8 (MSDN) [6].aspx), IE8: The Performance Implications [10], Testing IE8’s Connection Parallelism [11], IE8: Better Ajax, CSS, DOM, and new features [12].

Update: there is another new property, the XMLHttpRequest’s timeout [13].aspx). With the timeout property, Web developers can specify the length of time in milliseconds for the host to wait for a response before timing out the connection. I’m very sure that this new property and the event timeoutRaised will be added by the Firefox developers very soon.

Update 2: Updated the citation to include the recommendation that a single-user client SHOULD NOT maintain more than two connections. Well, it was defined in 1999 and Web has changed since then but I still would like to see Web applications only accessing my Web server with one connection. The only reason to have more than one connection: downloading files (CSS, JavaScript, or in common big files that are saved to disk). In the documentation of connectivity enhancements in IE8 [6].aspx) the registry key FEATURE_AJAX_CONNECTIONSERVICES will set the new maximum number back to two concurrent connections. I don’t know why there is the name AJAX used. ASP.NET developers may get in trouble if they are using the Session object and running concurrent AJAX requests as each requests has to wait until the previous has been finished.