71
deployment of architectural elements in a partial, iterative fashion, since it is not possible
to force deployment in an orderly manner.
4.2 ProblemIn late 1993, it became clear that more than just researchers would be interested in the
Web. Adoption had occurred first in small research groups, spread to on-campus dorms,
clubs, and personal home pages, and later to the institutional departments for campus
information. When individuals began publishing their personal collections of information,
on whatever topics they might feel fanatic about, the social network-effect launched an
exponential growth of websites that continues today. Commercial interest in the Web was
just beginning, but it was clear by then that the ability to publish on an international scale
would be irresistible to businesses.
Although elated by its success, the Internet developer community became concerned
that the rapid growth in the Web’s usage, along with some poor network characteristics of
early HTTP, would quickly outpace the capacity of the Internet infrastructure and lead to a
general collapse. This was worsened by the changing nature of application interactions on
the Web. Whereas the initial protocols were designed for single request-response pairs,
new sites used an increasing number of in-line images as part of the content of Web pages,
resulting in a different interaction profile for browsing. The deployed architecture had
significant limitations in its support for extensibility, shared caching, and intermediaries,
which made it difficult to develop ad-hoc solutions to the growing problems. At the same
time, commercial competition within the software market led to an influx of new and
occasionally contradictory feature proposals for the Web’s protocols.
72
Working groups within the Internet Engineering Taskforce were formed to work on
the Web’s three primary standards: URI, HTTP, and HTML. The charter of these groups
was to define the subset of existing architectural communication that was commonly and
consistently implemented in the early Web architecture, identify problems within that
architecture, and then specify a set of standards to solve those problems. This presented us
with a challenge: how do we introduce a new set of functionality to an architecture that is
already widely deployed, and how do we ensure that its introduction does not adversely
impact, or even destroy, the architectural properties that have enabled the Web to
succeed?
4.3 ApproachThe early Web architecture was based on solid principles—separation of concerns,
simplicity, and generality—but lacked an architectural description and rationale. The
design was based on a set of informal hypertext notes [14], two early papers oriented
towards the user community [12, 13], and archived discussions on the Web developer
community mailing list (
[email protected]). In reality, however, the only true
description of the early Web architecture was found within the implementations of
libwww (the CERN protocol library for clients and servers), Mosaic (the NCSA browser
client), and an assortment of other implementations that interoperated with them.
An architectural style can be used to define the principles behind the Web architecture
such that they are visible to future architects. As discussed in Chapter 1, a style is a named
set of constraints on architectural elements that induces the set of properties desired of the