Part II: The Web

Chapter 05

#The Web: one string to rule them all

Tim Berners-Lee World Wide Web https://www.w3.org/History/1989/proposal-msw.html https://en.wikipedia.org/wiki/Fall_of_the_Berlin_Wall https://history.state.gov/milestones/1989-1992/apartheid https://en.wikipedia.org/wiki/History_of_Poland_%281945%E2%80%931989%29#Final_decade_of_the_Polish_People%27s_Republic_%281980%E2%80%931989%29 In 1989 a wizard called Tim invented the World Wide Web and changed the world forever. There was quite a bit of world-changing going on that year, so this particular change didn't look all that important at the time. A proposal for sharing documents at CERN had to compete with falling walls, collapsing regimes and the end of the Cold War. Looking back, it may have mattered more than any of them. https://en.wikipedia.org/wiki/Tim_Berners-Lee https://www.w3.org/History/1989/proposal-msw.html https://en.wikipedia.org/wiki/Fall_of_the_Berlin_Wall https://history.state.gov/milestones/1989-1992/apartheid https://en.wikipedia.org/wiki/History_of_Poland_%281945%E2%80%931989%29#Final_decade_of_the_Polish_People%27s_Republic_%281980%E2%80%931989%29

https://info.cern.ch The first website did not look much like the future. It was mostly text and links. It didn't even have a cookie banner: https://info.cern.ch

html
<header>
<title>http://info.cern.ch</title>
</header>

<h1>http://info.cern.ch - home of the first website</h1>
<p>From here you can:</p>
<ul>
<li><a href="http://info.cern.ch/hypertext/WWW/TheProject.html">Browse the 
    first website</a></li>
<li><a href="http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html">
    Browse the first website using the line-mode browser simulator</a></li>
<li><a href="http://home.web.cern.ch/topics/birth-web">Learn about the birth
    of the web</a></li>
<li><a href="http://home.web.cern.ch/about">Learn about CERN, the 
    physics laboratory where the web was born</a></li>
</ul>
</body>

It does not look revolutionary today. Most of the Web wasn't. But one part is. It is a small thing: a tag with just one letter, a.

html
<a href="http://info.cern.ch/hypertext/WWW/TheProject.html">The World Wide Web project</a>

Hidden inside it is another invention, probably the more important one:

url
http://info.cern.ch/hypertext/WWW/TheProject.html

https://url.spec.whatwg.org/ The URL. The Uniform Resource Locator. To understand why this small invention mattered, we need to go back a little further than 1989. https://url.spec.whatwg.org/

https://en.wikipedia.org/wiki/Hypertext Ted Nelson Hypertext Vannevar Bush As We May Think https://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/ Back then the internet was already a few years old. The idea of hypertext was even older than that. Ted Nelson coined the term in 1965, and you can trace the dream further back to Vannevar Bush's 1945 essay As We May Think. https://en.wikipedia.org/wiki/Hypertext https://en.wikipedia.org/wiki/Ted_Nelson https://en.wikipedia.org/wiki/Vannevar_Bush https://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/

But while hypertext as a concept had been around, nobody had truly made it work. At least not on a global scale.

https://en.wikipedia.org/wiki/Project_Xanadu https://en.wikipedia.org/wiki/HyperCard Ted Nelson started the Xanadu project in the 1960s. Apple released HyperCard in 1987. https://en.wikipedia.org/wiki/Project_Xanadu https://en.wikipedia.org/wiki/HyperCard

Xanadu tried to solve the entire problem of hypertext and never produced a system that ordinary people could use. HyperCard did ship, and it was popular for a while, but never got as big as the Web. It couldn't cross the gap to another computer maintained by someone else.

The Web could.

https://en.wikipedia.org/wiki/Internet_protocol_suite https://en.wikipedia.org/wiki/Domain_Name_System https://en.wikipedia.org/wiki/Unix Sir Tim Berners-Lee did not have to invent networking from scratch. The internet existed. TCP/IP was there. He did not have to invent a global naming system for computers. DNS existed. He did not have to invent hierarchical file paths. Unix had made those familiar. https://en.wikipedia.org/wiki/Internet_protocol_suite https://en.wikipedia.org/wiki/Domain_Name_System https://en.wikipedia.org/wiki/Unix

He stole those ideas and packaged them together in one new thing: the URL.

#Three stolen pieces

Look again at the URL:

url
http://info.cern.ch/hypertext/WWW/TheProject.html

It has three parts:

text
http://    info.cern.ch    /hypertext/WWW/TheProject.html
protocol  hostname        path

How to talk, which computer to talk to, and what to ask it for, all in a single human-readable string. And just like that, we could refer to any file on any computer anywhere in the world.

It is simple, small and readable. You can copy a URL into an e-mail, print it in a book, write it on a whiteboard, paste it in a chat message, or, if you are feeling particularly cursed, read it aloud over the phone.

The URL is an address, but it is also a tiny user interface to the network.

#The path

text
/hypertext/WWW/TheProject.html

If you have used a Unix-like system, this shape is familiar. A slash separates folders and files. A path starts at a root, then moves down through names until it reaches the thing you want.

text
/hypertext
/hypertext/WWW
/hypertext/WWW/TheProject.html

This feels obvious now, but it was only one possible way to name files. DOS and Windows used backslashes and drive letters. VMS had paths that looked like they had escaped from an engineering manual:

text
NODE"accountname password"::device:[directory.subdirectory]filename.type;ver

Sir Tim built the Web on a NeXT Cube, Steve Jobs's Unix machine. So it is no surprise that the URL follows Unix's path format, the simplest of the bunch.

Unix itself had stolen and simplified ideas from earlier systems such as Multics. One of its beautiful tricks is that users do not normally need to care which physical device a file is on. There is a single tree. Disks and devices can be mounted into that tree. The messy physical world disappears behind a simpler name world.

Simple ideas get complicated when they meet the real world. For example, how would you name a file that includes a /? The simple answer is "don't do that." The common solution is an 'escape' character, such as a backslash:

code
/folder\/with_a_slash/

An escape character says: the next character is not what it seems. But DOS already used the backslash to separate folders. So Sir Tim chose a different escape, now called URL encoding:

code
/folder%2Fwith_a_slash/

https://en.wikipedia.org/wiki/ASCII Here the escape character is %, and it is always followed by two hexadecimal digits. 2F is hexadecimal for 47, and in the ASCII encoding character 47 is /. https://en.wikipedia.org/wiki/ASCII

Any character can be added to a URL like this, even one that isn't normally printable. That lets a URL travel anywhere: in an e-mail, or even in a book.

#The hostname

url
//info.cern.ch/

https://en.wikipedia.org/wiki/Apollo_Computer The double slash says that what follows is a network location. This convention was borrowed too; Berners-Lee has said he took it from Apollo workstations, where // was used for network paths. https://en.wikipedia.org/wiki/Apollo_Computer

The more important stolen idea here is DNS, the Domain Name System.

Before DNS, the internet was small enough that people could maintain host files: lists of names and IP addresses. Your computer may still have such a file. It is charming in the same way a village phone book is charming. Once the village becomes the whole planet, the charm wears off.

https://en.wikipedia.org/wiki/Paul_Mockapetris A wizard called Paul Mockapetris was asked to design something better. He did so in 1983, and by 1986 it was an internet standard. For its day, it was admirably decentralized. https://en.wikipedia.org/wiki/Paul_Mockapetris

One machine no longer needed a complete list of every other machine. Names could be delegated. Different organizations could manage different parts. The naming system itself became a hierarchy, which meant it could grow without asking one poor text file to contain the world.

By the time Sir Tim wrote his proposal, DNS was well established. He did not need to invent a naming system. He just put the existing one inside the URL.

#The protocol

url
http://

The protocol looks like the least interesting part of the URL. In fact it reveals the almost megalomaniac ambition behind it.

https://en.wikipedia.org/wiki/Gopher_%28protocol%29 Compare it with Gopher, another worldwide information system that appeared around the same time. For a brief moment, Gopher was a serious contender. A Gopher menu entry might contain a type, a title, a path, a hostname and a port: https://en.wikipedia.org/wiki/Gopher_%28protocol%29

text
1CIA World Factbook    /Archives/politics/CIA    gopher.example.org    70

A line like that can point to information on another Gopher server. The format is useful, but the world it imagines is still mostly Gopher-shaped. You are moving from one part of Gopher-space to another.

A URL begins by saying which kind of space you are entering. http: is one possibility. A browser might also understand ftp:, file:, mailto:, and later data:, blob:, webcal:, magnet:, and a long list of stranger creatures.

The design was good enough that wizards everywhere stole it and extended it for their own purposes. Not all later schemes were protocols. Some told the browser how to interpret the rest of the string; others opened another application.

Almost none of the pieces in a URL were new. The trick was putting existing pieces together in one simple string.