The TCP/IP Guide - Version 3.0 (Contents) ` 1538 _ © 2001-2005 Charles M. Kozierok. All Rights Reserved.
HTTP/1.0 was the version of HTTP that was widely implemented in the mid-1990s as the
Web exploded in popularity. After only a couple of years, HTTP accounted for the majority
of the traffic on the burgeoning Internet. The popularity of HTTP was in fact so great that it
single-handedly prompted the installation of a lot of new hardware to handle the load of
browser requests and Web server replies.
Unfortunately, much of this huge load of traffic was due to some limitations in HTTP itself.
These only became apparent due to the tremendous growth in the use of the protocol
which, combined with the normal growing pains of the Internet, led to many frustrated Web
users. The inefficiencies of HTTP version 1.0 were a result of design limitations such as the
need for each site to be hosted on a different server, the fact that each HTTP session
handled only one client request, and a general lack of support for necessary performance-
enhancing features such as caching, proxying and partial resource retrieval.
HTTP/1.1
While impatient pundits coined sarcastic terms such as the “World Wide Wait”, the IETF
continued to work to improve HTTP. In January 1997, the first draft version of HTTP/1.1
appeared: in RFC 2068. This document was later revised and published as RFC 2616,
Hypertext Transfer Protocol — HTTP/1.1, in June 1999. HTTP/1.1 retains backwards
compatibility with both HTTP/1.0 and HTTP/0.9. It is accompanied by RFC 2617, HTTP
Authentication: Basic and Digest Access Authentication, which deals with security and
authentication issues.
HTTP/1.1 introduces several significant improvements over version 1.0 of the protocol,
most of which specifically address the performance problems I just described. Some of the
more important improvements in version 1.1 are:
☯ Multiple Host Name Support: In HTTP/1.0, there was no way to specify the host
name of the server to which the client needed to connect. As a result, the Web server
at a particular IP address could only support one domain name. This was not only
inefficient, it was exacerbating the depletion of IP addresses in the 1990s, because
each new Web server to come online required a new IP address. HTTP/1.1 allows one
Web server to handle requests for dozens or even hundreds of different virtual hosts.
☯ Persistent Connections: HTTP/1.1 allows a client to send multiple requests for
related documents to a server in a single TCP session. This greatly improves perfor-
mance over HTTP/1.0, where each request required a new connection to the server.
☯ Partial Resource Selection: In HTTP/1.1, a client can ask for only part of a resource
rather than the entire document, which reduces the load on the server and saves
transfer bandwidth.
☯ Better Caching and Proxying Support: HTTP/1.1 includes many provisions to make
caching and proxying more efficient and effective than they were in HTTP/1.0. These
techniques can improve performance by providing clients with faster replies to their
requests while reducing the load on servers, as well as enhancing security and imple-
menting other functionality.
☯ Content Negotiation: A negotiation feature was added that allows the client and
server to exchange information to help select the best resource or version of a
resource when multiple variants are available.