跳转到内容
← 返回核心概念
系统与架构计算机科学 · 互联网19 分钟阅读

万维网与 HTTP

The Web and HTTP

1991 年 8 月 6 日,互联网上出现了第一个公开可访问的网页。它的内容是关于如何使用万维网的说明,由 Tim Berners-Lee 在瑞士日内瓦的 CERN(欧洲核子研究中心)托管。地址后来常写成 http://info.cern.ch。万维网的第一份公开文档是说明书,不是报纸:它教人怎么用浏览器、服务器和 H…

HTTP万维网RESTHTML

1991 年 8 月 6 日,互联网上出现了第一个公开可访问的网页。它的内容是关于如何使用万维网的说明,由 Tim Berners-Lee 在瑞士日内瓦的 CERN(欧洲核子研究中心)托管。地址后来常写成 http://info.cern.ch。万维网的第一份公开文档是说明书,不是报纸:它教人怎么用浏览器、服务器和 HTML。

这一天距 ARPANET 建立已过去 22 年。互联网(Internet)存在了 22 年,但万维网(World Wide Web)才刚刚开始。互联网和万维网常被混用,实际上截然不同:互联网是底层的网络基础设施,万维网是运行在互联网之上的一种特定的信息超链接系统

1993 年 4 月 30 日,CERN 把万维网软件放进公有领域。几个月后 Mosaic 浏览器把图片嵌进页面,网不再只是物理学家的备忘录。协议开放与多媒体被一次性打包,两件事叠在一起,网才从高能物理的说明书变成报纸的对手。Berners-Lee 没有为协议申请专利。开放是后来爆炸的前提,也是后来中心化的缝:谁都能建站,流量却可以重新集中。状态码是一份共享词汇。404 不只是失败,它让爬虫、监控和人用同一个数字谈话。没有这张表,缓存不知道何时重试,搜索引擎不知道何时删库。

明文 HTTP 在 2010 年代的死亡,是监听丑闻、搜索排名和免费证书三件事叠出来的,不是一次技术会议的决议。安全默认值往往不是密码学先胜,而是激励改了。

破除误解:网络不等于互联网

互联网(Internet)是由 TCP/IP 协议连接的全球计算机网络,支持电子邮件、FTP、VoIP、万维网等众多服务。万维网(World Wide Web,WWW)是其中一种服务:以超链接文档(HTML)为形式,以 HTTP 为传输协议,以 URL 为地址系统的信息空间。

没有万维网,互联网仍然存在——电子邮件、新闻组、FTP 都在万维网诞生前运作多年。Berners-Lee 的贡献是把文档链接地址传输协议打包成一个易于使用的系统。

三个核心构件

万维网不是一夜之间出现的。1989 年 3 月,Berners-Lee 向 CERN 提交了一份名为《Information Management: A Proposal》的备忘录,主张用超文本把机构内分散的文档连成网络——当时他甚至没给系统定名,一度称之为 "Mesh","World Wide Web" 是 1990 年写代码时才定下的。同年他与同事 Robert Cailliau 正式立项,并在年底亲手做出三样东西:第一个浏览器(同时也是编辑器,名叫 WorldWideWeb)、第一个 Web 服务器、第一个网站。这个网站早在 1990 年 12 月 20 日就在 CERN 内网上线,1991 年 8 月 6 日才对 CERN 之外的公众开放。万维网真正的骨架,是下面三个彼此配合的发明:

1. URL(统一资源定位符):给每个资源一个全球唯一的地址。 `` https://www.example.com:443/path/to/page?key=value#section |____| |_____________| |__| |_________| |_______| |_____| 协议 主机名 端口 路径 查询字符串 片段 ``

2. HTML(超文本标记语言):描述文档结构和内容,以及文档之间的链接。链接让"超文本"成为现实——读者可以自由跳转,不再受线性阅读的限制。

3. HTTP(超文本传输协议):客户端(浏览器)与服务器之间的请求/响应协议。

HTTP 的工作原理

HTTP 是无状态的请求-响应协议。每次交互:

客户端发送请求:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

服务器返回响应: HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 1234

<html>...</html> ```

HTTP 方法(动词)定义操作语义: - GET:获取资源,无副作用,可缓存 - POST:提交数据,创建资源 - PUT:替换资源 - PATCH:部分更新资源 - DELETE:删除资源 - HEAD:只获取响应头,不要正文 - OPTIONS:查询服务器支持哪些方法

状态码告知结果:

范围含义常见示例
2xx成功200 OK, 201 Created, 204 No Content
3xx重定向301 永久移动, 302 临时移动, 304 未修改
4xx客户端错误400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xx服务器错误500 Internal Server Error, 503 Service Unavailable

安全方法与幂等方法:RFC 9110 给 HTTP 方法赋予两条正交的语义约束。安全(safe)指方法本质上是只读的、客户端不期望它改变服务器状态——GETHEADOPTIONS 都安全。幂等(idempotent)指同一个请求发一次和发多次,对服务器的最终影响相同——GETPUTDELETE 都幂等(对同一资源重复 DELETE,结果都是"它不存在")。POST 既不安全也不幂等:连点两次提交按钮,可能真的下两笔订单。这套语义不是吹毛求疵——浏览器、代理与 CDN 正是据此决定能否缓存响应、能否在超时后自动重试请求。若把"修改数据"误用 GET 实现,搜索引擎爬虫或浏览器预取就可能在你毫不知情时改坏后台数据。

HTTP 的演化:从 0.9 到 3

HTTP/0.9(1991):只有 GET 方法,只能传 HTML,每次请求新建 TCP 连接。

HTTP/1.0(1996,RFC 1945):引入方法、头部、状态码、多媒体类型。仍然每请求一连接。

HTTP/1.1(1997,RFC 2068;修订 1999,RFC 2616):引入持久连接(Keep-Alive)(同一 TCP 连接复用多次请求)、管道(Pipelining,允许连续发送请求不等响应)、分块传输编码、Host 头(允许一个 IP 托管多个域名)。Host 头看起来像一条小字段,经济后果很大:没有它,一个 IP 只能挂一个域名,共享主机和后来的虚拟主机业态几乎长不出来。HTTP/1.1 统治互联网长达 15 年以上。这份规范本身也在不断打磨:2014 年它被拆分重写为 RFC 7230–7235(语法、语义、缓存、认证各自成篇),2022 年又整合为 RFC 9110–9112,并首次升格为互联网标准(Internet Standard,STD 97)。管道在实践里几乎没站住——队头阻塞加上代理实现不一致,浏览器后来默认关掉它。真正把并行做进一条连接的,是 HTTP/2 的多路复用。

HTTP/2(2015,RFC 7540;2022 年经 RFC 9113 修订):脱胎于 Google 2009 年发布的实验性协议 SPDY。核心改进: - 二进制帧(取代文本格式,更高效解析) - 多路复用(Multiplexing):单个 TCP 连接上并行传输多个请求/响应流 - 头部压缩(HPACK):减少重复头部的传输量 - 服务器推送(Server Push):服务器可主动推送资源

压缩加加密曾打开过一扇窗:CRIME、BREACH 一类攻击吃的就是压缩比泄漏的秘密。后来的协议在压缩和保密之间更谨慎。性能优化会重新打开密码学以为关上的窗。

HTTP/2 消除了 HTTP/1.x 的"队头阻塞"(在应用层)——但 TCP 层的队头阻塞仍然存在。

HTTP/3(2022,RFC 9114):传输层从 TCP 换为 QUIC(RFC 9000,基于 UDP)。QUIC 让每条流独立处理丢包,彻底消除了 TCP 层的队头阻塞;它还支持连接迁移(手机从 Wi-Fi 切到蜂窝网络也不断连),并把 TLS 加密内建进握手。第一次往返就能带上加密,是为了把"建连"从多次握手压成一次。据 Cloudflare 统计,2025 年已有约 35% 的请求走 HTTP/3。比例随运营商和客户端变化,把它当成全网常数并不稳;方向是清楚的:Web 的传输层正在从"可靠字节流"换成"可靠的多条流"。

REST:Web API 的架构风格

REST(Representational State Transfer)由 Roy Fielding 在 2000 年的博士论文中提出,是一套描述 Web 架构风格的约束集合。RESTful API 把网络服务的每个资源赋予 URL,用 HTTP 方法表达操作语义:

GET    /users/42        # 获取用户 42 的信息
POST   /users           # 创建新用户
PUT    /users/42        # 替换用户 42 的信息
DELETE /users/42        # 删除用户 42
```

REST 不是标准,是一种风格。它的普及使 Web API 设计趋于统一,但"真正的 RESTful"在工程界常有争议。GraphQL(Facebook,2015)和 gRPC(Google,2016)是主要的替代方案,各有适用场景。

HTTPS 与 TLS

HTTP 本身是明文——所有传输数据包括密码都可被监听。HTTPS = HTTP over TLS:在 TCP 和 HTTP 之间加入 TLS 层,实现加密和服务器身份验证。

2010 年代,推动 HTTPS 的历史事件包括: - 斯诺登披露(2013):NSA 大规模监听互联网流量 - Google 从 2014 年起给 HTTPS 网站在搜索排名中加分 - Let's Encrypt(2015):免费自动化证书颁发,让小网站也能用 HTTPS。证书不再是每年几百美元的门禁,HTTPS 才从银行网站变成默认。技术门槛下降之后,明文 HTTP 失去了"太贵所以不用"的借口。

2023 年,约 95% 的 Chrome 浏览器页面加载使用 HTTPS。明文 HTTP 实际上已成遗迹。

HTTP 的无状态性(每个请求互相独立)在功能上是简单性的来源,在工程上却是麻烦——如何让服务器记住"用户已登录"?

Cookie(1994 年由 Netscape 工程师 Lou Montulli 发明):服务器在响应中设置小型键值对,浏览器在后续请求中自动携带。这让"会话"成为可能。"cookie" 这个名字借自 Unix 世界早已有的 "magic cookie"——一段由客户端原样带回给服务器的数据。它最初只是 Netscape 的私有约定,直到 1997 年 2 月才被 RFC 2109 正式标准化。

这里要破除一个常见误解:HTTP 无状态,并不等于"网站记不住你、没法登录"。无状态说的是协议层——每个请求自带全部信息,服务器不被强制保留上一个请求的上下文。登录态是在应用层补出来的:要么把会话标识塞进 cookie,要么把令牌(如 OAuth 2.0 的 Bearer token、JWT)放进 Authorization 头随请求带上。无状态反而是优点——它让任意一台服务器都能处理任意一个请求,这正是 Web 能水平扩展、扛住海量并发的前提。GET 因此可以被缓存、被重放、被 CDN 复制。这既是性能来源,也是安全边界:带副作用的请求不能走这条便宜的路。REST 把约束说成风格,工程上则是缓存能不能赚钱的问题。

Cookie 后来也成为广告追踪的基础,引发了长达二十年的隐私之争。Safari 与 Firefox 已默认屏蔽第三方 Cookie(跨站追踪);浏览器还引入 SameSite 属性(Chrome 自 2020 年起把未声明的 cookie 默认按 SameSite=Lax 处理)来限制 cookie 的跨站发送,这也是抵御 CSRF 的一道防线。这里要更正一个流行说法:Chrome 曾计划全面淘汰第三方 Cookie,但 Google 在 2024 年放弃了该计划,2025 年 4 月撤掉了"用户选择"提示,并于 2025 年 10 月终止整个 Privacy Sandbox——截至 2026 年,第三方 Cookie 仍保留在 Chrome 中,没有移除时间表。

代价与争议

开放性与滥用:HTTP 的开放性让任何人都能建网站,也让钓鱼、垃圾邮件、DDoS 无处不在。Web 的成功从未与安全同步。

Web 的中心化:万维网最初的愿景是去中心化的信息网络。但今天,网络流量高度集中在少数平台(Google、Facebook、Amazon、Cloudflare)。Berners-Lee 本人多次表达对这种中心化趋势的担忧,并在 2018 年启动 Solid 项目,试图重建去中心化 Web。Solid 想把个人数据放回用户控制的 pot。愿景仍是 1989 年备忘录里的文档网:链接还在,所有权换手。落地远慢于平台。开放协议不保证开放权力——TCP/IP 和 HTTP 足够开放,广告与登录态仍然可以把流量折进少数域名。去中心化若只改存储位置、不改发现与激励,中心会在别的层长回来。

URL 把"在哪"和"叫什么"焊在一起。页面搬家,旧地址就变成 404 或被重定向改写。数字人文跨域已经点了可引用性的裂口:同一地址在不同时间、对不同人可以返回不同内容。内容寻址(按哈希取文档)能补上这一刀,却还不是 Web 的默认。Berners-Lee 最初要的是可点击的链接,不是永不变的图书馆索书号。成功与缺陷来自同一个设计选择。

Cookie 从 Netscape 的私有约定走到 RFC,中间隔了三年。标准化往往落后于已经铺开的行为。浏览器先造成事实,委员会再追认。HTTP 的许多"标准"都是这种事后照片。理解 Web,要同时读 RFC 和已经占领市场的实现。HTTP 方法的安全与幂等也是这种事后才被说清楚的纪律。浏览器按这张表决定能不能缓存、能不能超时重试;把改数据的动作伪装成 GET,爬虫就会在你不知情时写库。语义不是修辞,是机器要执行的合同。Web 能放大,是因为这份合同足够简单,简单到可以被缓存层、浏览器和爬虫同时遵守。复杂的合同无法被机器执行。

HTTP/2 Server Push 的失败:HTTP/2 引入的服务器推送功能,理论上可以让服务器在客户端请求前推送所需资源。实践中,浏览器实现复杂、收益不明显。Chrome 在 2022 年宣布移除 HTTP/2 Server Push 支持。这是一个"理论上优美,实践中失败"的设计的典型案例。

跨域连接

  • API 设计:安全与幂等不是术语洁癖,而是可被第三方依赖的契约:浏览器、代理与内容分发网络据此决定能否缓存、能否在超时后自动重试。这给出一条可检验的后果——把修改数据的操作用只读方法实现,爬虫抓取或浏览器预取就可能在无人操作时改坏后台,而承担代价的是服务提供方而非违约方。
  • 负载均衡:无状态是水平扩展的前提,不是缺陷。若服务器必须保留上一请求的上下文,任意请求就不能交给任意实例处理,负载均衡与故障转移同时被绑死。把会话外置到令牌或共享存储,等于把状态从进程内移到请求内,代价是每个请求都要携带并验证凭据——扩展性正是用这份重复开销换来的。
  • 平台治理:浏览器是事实上的规制者,默认设置比立法更快地重塑整个广告生态。正文那段反复的第三方 Cookie 政策也暴露了这一安排的问题:做决定的厂商同时是广告收入方。推论是把关键隐私默认值交给单一市场主体,其结果可以由该主体的收入结构相当程度地预测,而非由技术优劣决定。
  • 言论自由:全网加密把「能否被大规模被动监听」从政策问题变回技术问题,监听成本因此陡增。但它并不减少审查总量,只是把施加位置从网络中段推向端点与平台。可观察的推论是:加密普及之后,管控手段转向域名解析、应用商店与平台规则,这些环节更集中、更少公开记录,也更难被外部核查。
  • 数字人文与大数据史学:网页的可引用性有个结构性缺陷——同一个地址在不同时间、对不同人可能返回不同内容,个性化更让「同一来源」不再唯一。这使引用无法复核,除非补上访问时间与存档快照。推论是内容寻址标识与网页存档不是锦上添花,而是把网络材料纳入可核查证据体系的最低条件。

参考文献

  • Berners-Lee, T. Information Management: A Proposal. CERN, 1989. (万维网提案原文)
  • CERN. Statement concerning CERN W3 software release into public domain. 30 April 1993.
  • Fielding, R. Architectural Styles and the Design of Network-based Software Architectures. PhD dissertation, UC Irvine, 2000. (REST 的出处)
  • Ietf. HTTP/1.1. RFC 9110–9112, 2022. (HTTP 的最新统一规范)
  • IETF. Hypertext Transfer Protocol -- HTTP/1.0. RFC 1945, 1996. (HTTP/1.0 规范)
  • Belshe, M., Peon, R., Thomson, M. Hypertext Transfer Protocol Version 2 (HTTP/2). RFC 7540, 2015. (HTTP/2,源自 SPDY)
  • Bishop, M. (Ed.) HTTP/3. RFC 9114, 2022. (基于 QUIC / RFC 9000)
  • Kristol, D., Montulli, L. HTTP State Management Mechanism. RFC 2109, 1997. (Cookie 的首个标准化规范)

延伸阅读

  • Grigorik, I. High Performance Browser Networking. O'Reilly, 2013. (免费在线版)