跳轉到

1991 - 全球資訊網 WWW(把互聯網變成可讀的)#

案件摘要#

1991 年 8 月 6 日,Tim Berners-Lee 在 CERN 發布全球資訊網第一個公開網站:

\[ \text{URL} + \text{HTTP} + \text{HTML} \quad\text{三件套} \quad\Longrightarrow\quad \text{可點擊的全球資訊網}. \]

他 1989 年提出的提案只有一頁紙,標題是〈Information Management: A Proposal〉—— WWW 從提案到壟斷全球僅 5 年(1995 年 Netscape IPO)。 這是通訊史與人類史的交會點。

前因 -- 為什麼會有這個案子#

  • CERN 的內部混亂(1980s):全球粒子物理實驗需要分享海量資料、文件、人員——但當時是 FTP + 電子郵件 + 電話 + 紙本。 每次跨實驗查一份文件,要打長途電話給「文件管理員」——資訊的物理瓶頸。
  • 1980s 的既有系統都不合格:
  • FTP:只能下載檔案,無法在文件間「跳轉」(無法點擊連結)。
  • Gopher(1991,U Minnesota):階層選單可瀏覽,但只能一個中心伺服器,無連結、無跨站。
  • HyperCard(1987,Apple):超文字卡片,但只限 Mac 平台、只限單機。
  • Berners-Lee 的偵探直覺(關鍵的三個洞見):
  • 超文字 (Hypertext):文檔之間用連結 (link) 連接——但要能在任何機器上。
  • 資源用 URL 標識:
\[ \text{URL} = \text{scheme}://\text{host}/\text{path} \]
  1. 三件套必須免費開放:HTML、HTTP、URL 全部開放(1993 年 CERN 宣布 Public Domain)—— 贏家通吃的策略由此定調。
  2. 關鍵角色:Robert Cailliau(1990 提供商業論證支持)、CERN 允許他在非正式工作做(老闆當時並不看重)。

線索與推理 -- 數學式、程式、理論#

第一條線索:超文字的數學(連結的數學)#

一個網頁集合建模為有向圖 \(G = (V, E)\) : - \(V\) :URL(統一資源定位符)——每個資源一個唯一識別碼。 - \(E\) :超連結。

\[ \text{全球網} = G(V, E), \qquad |V| \approx 10^{11}\ (\text{2020s}),\ \ |E| \approx 10^{12}+. \]

連結構成一個有向圖——網路爬蟲 = 圖的深度優先/廣度優先遍歷:

\[ \text{爬蟲} = \text{圖遍歷(DFS/BFS)}\ \text{從種子節點}. \]

第二條線索:URL 的分解(識別碼的設計)#

\[ \text{URL} = \underbrace{\text{scheme}}_{\text{http}}://\underbrace{\text{host}}_{\text{www.x.com}}/\underbrace{\text{path}}_{\text{page.html}} \]
  • URL 為資源命名——DNS 解析 host(見「1983-DNS域名系統.md」),HTTP 傳輸(見「1974-TCPIP協定.md」)。
  • 資源與位置分離:URL 標識「資源是什麼」;相對路徑(../index.html)——可移動性的設計。

第三條線索:HTTP 的狀態碼(工程化)#

HTTP/1.1 的方法(GET/POST/HEAD)與狀態碼(200/404/500)——標準化:

\[ \text{HTTP} = \text{請求-回應模型} \quad \text{(client/server 的無狀態交互)}. \]

無狀態 (stateless):每次請求獨立(不同於 Telnet 的持續連線)—— 負載均衡與多伺服器架構因此成為可能(可任意分配請求到不同後端)。

Python:一個迷你 Web 伺服器 + 爬蟲#

from http.server import HTTPServer, SimpleHTTPRequestHandler
from html.parser import HTMLParser
import threading

# 1) 迷你 HTTP 伺服器(展示 HTTP 是「請求-回應 + 無狀態」)
class Handler(SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/hello":
            body = b"<html><body><h1>Hello, WWW!</h1><a href='/link'>link</a></body></html>"
            self.send_response(200)                     # 200 OK
            self.send_header("Content-type", "text/html")
            self.send_header("Content-length", str(len(body)))
            self.end_headers(); self.wfile.write(body)
        else:
            self.send_response(404); self.end_headers()  # 404 Not Found
    def log_message(self, *a): pass

# 2) 迷你爬蟲(DFS 遍歷連結)
class LinkCrawler(HTMLParser):
    def __init__(self): super().__init__(); self.links = []
    def handle_starttag(self, tag, attrs):
        if tag == "a":
            d = dict(attrs)
            if "href" in d: self.links.append(d["href"])

crawler = LinkCrawler()
crawler.feed("<a href='/a'>A</a> <a href='/b'>B</a>")
print("爬蟲從 HTML 中提取的連結:", crawler.links)

# 啟動伺服器並測試
srv = HTTPServer(("localhost", 8000), Handler)
threading.Thread(target=srv.serve_forever, daemon=True).start()
import urllib.request
print("HTTP GET /hello 狀態:", urllib.request.urlopen("http://localhost:8000/hello").status)
srv.shutdown()
輸出:
爬蟲從 HTML 中提取的連結: ['/a', '/b']
HTTP GET /hello 狀態: 200
(URL 標識資源、HTTP 傳輸、HTML 超文字——三件套的最小實現。)

結案 -- 後果與影響#

  • 網路的爆炸(1993–1998):CERN 1993 年 4 月 30 日宣布 WWW Public Domain → Mosaic 瀏覽器 → Netscape IPO(1995)→ 雅虎(Yahoo, 1994)→ Google(1998)—— WWW 從研究工具變成主流媒體與商業。
  • WWW 的本質被理解(1990s):Roy Fielding 在博士論文(2000)中給出 REST 架構——HTTP 的「統一介面」(GET/POST/PUT/DELETE,無狀態)成為雲端 API 的標準(2000s 至今)。
  • Web 的物理層穩固(2000s):
  • HTTP/2(2015):多路復用 + 頭部壓縮 + 伺服器推送(解決 HTTP/1.1 的 head-of-line blocking)。
  • HTTP/3 (QUIC, 2022):跑在 UDP 上,內建加密與多路復用(Google 推動)。
  • Bob Berners-Lee 的榮譽:萬維網基金會 (W3C, 1994)、2016 年圖靈獎(與 Robert Kahn 同獲)——「為社會服務的技術貢獻」首座圖靈獎。
  • 歷史的迴響:2016 年美國科學界重新評價——WWW 是史上影響力最大的科技發明之一。
  • 歷史定位:從 1989 一頁提案到 2016 圖靈獎——27 年的從無到有;「Tim 的原型最小可行」是千古範例。

關鍵人物與文獻#

  • T. Berners-Lee:《Weaving the Web》(1999);〈Information Management: A Proposal〉(1989);〈HTTP/1.1》RFC 2616 (1997);2016 圖靈獎。
  • R. Cailliau:1990 合作提案;R. Fielding:REST 論文 (2000)。
  • 相關案件:1974-TCPIP協定.md、1983-DNS域名系統.md。