{"id":"mb-20261012-a4816b","kind":"deep","title":"700个单词与三十年补丁：HTTP是如何靠权宜之计撑起整个互联网的","summary":"1991年万维网发明人把调制解调器焊进酒店墙壁，演示了一份只有700个单词的极简协议。三十年来，从拼错至今的报头、拯救IPv4地址的Host补丁，到谷歌改写传输层的QUIC和抗击AI爬虫的402状态码，整个互联网底层从来不是深谋远虑的完美设计，而是一部边狂奔边打补丁的工程史。","body":"1991年，万维网的发明人去美国德州开会，在酒店里向服务台借了一把电烙铁。\n因为那家酒店根本没通网，而他从欧洲带来的调制解调器，连插头都对不上美国的插座。\n他把机器外壳拆开，直接把电线焊进了酒店房间墙壁里的电话线接口。\n他当晚要给同行演示的协议草案，全文只有 700 个英文单词。\n那是他在欧洲核子研究中心给物理学家查论文随手写的。\n规则只有一条：网页必须在十分之一秒内送达。\n因为时间太紧，根本没有闲聊的余地。\n浏览器建立连接，发过去一个单词 GET 和一个地址，服务器把纯文本吐出来，立刻挂断电话。\n没有错误代码，没有身份验证，没有状态记录。\n这就是 HTTP。\n今天全世界每一个网页、每一个手机应用、每一个在深夜里疯狂爬取数据的 AI 模型，底下全跑着这套东西。\n\n三十多年过去了，它几乎没有一样是按原计划跑下来的。\n为了做网上购物车，工程师硬生生塞进去了 Cookie。\n为了抢用户，所有浏览器都在报头里撒谎说自己叫 Mozilla。\n甚至有一个拼写错误在里面躺了三十年，全世界没有任何一个工程师敢去把它改对。\n\n那是 1995 年。\n有人在邮件列表里问：你们有没有发现，HTTP 报头里的 Referer 好像少写了一个字母 r？\n正确的英文是 Referrer，中间有两个 r。\n参与讨论的罗伊·菲尔丁开玩笑说，要不把锅扣给法国人吧。\n但玩笑归玩笑，当时跑在网上的服务器和解析脚本实在太多了。\n只要有人把这个拼写改对，全球的网页追踪系统瞬间就会大面积瘫痪。\n三十年后的今天，技术规范里依然保留着这行字：这是一个拼写错误，但大家必须继续这么错下去。\n\n拼写错误顶多让人笑一笑，真正差点把互联网搞垮的是服务器那一头。\n在早期的 HTTP 1.0 时代，你向服务器发请求，里面只有文件名，没有域名。\n你访问一个网站，浏览器发出去的请求其实就一行：给我 index.html。\n它根本没告诉服务器自己找的是哪个网站。\n这意味着什么？\n这意味着只要一台服务器连上网，它就只能放一个网站，必须独占一个独立的公网 IP 地址。\n到了 1996 年，全世界的 IPv4 地址开始亮红灯。\n总共只有 42 亿个地址，照这么挥霍，整个网络很快就会无地可用。\n以太网的发明人罗伯特·梅特卡夫甚至在专栏里公开断言：互联网将在 1996 年发生灾难性崩溃。\n怎么救？\n工程师吉姆·盖蒂斯在邮件里叹着气写道：最优雅的做法本来是重写整个协议，但那会毁掉所有现存的服务器。\n于是他们在 HTTP 1.1 里面打了一个极为实用的补丁。\n每次发请求，必须附带一行报头：Host。\n也就是在信封上明确写上，你敲开这扇大门，要找的到底是哪个域名。\n就凭这简简单单的一行字，一台服务器就能同时托管成百上千个不同的网站。\n今天几乎整个网络托管和云计算行业，都是从这行补丁里长出来的。\n顺便说一下，到了 1997 年，互联网不仅没塌，梅特卡夫还在大会现场把自己的专栏文章撕碎泡在碗里，当着一千多人的面拿勺子吃了下去。\n\n既然打补丁能应付，大家就开始得过且过。\n从 1999 年 HTTP 1.1 正式定稿，接下来的 16 年里，整个互联网几乎没人敢动底层协议。\n参与编写规范的工程师写下了一句大实话：\n每一次推翻重来的尝试都失败了，因为现有的设计虽然一身毛病，但它好歹还能用，这就足以打消所有革命的念头。\n既然底层不能动，工程师们就开始钻空子。\nHTTP 1.1 规定，一个浏览器向同一台服务器最多只能同时开 2 条连接。\n当年网页全是纯文本，2 条确实够用。\n但后来网页塞满了图片和脚本，几十个文件排着队等这 2 条管道，页面卡得让人抓狂。\n前端工程师怎么干的？\n搞一堆假域名，把图片切到不同的子域名下面，强行骗过浏览器的连接数限制。\n浏览器厂商也坐不住了。\n2008 年微软发布 IE8，悄悄把连接上限改成了 6 条。\n标准组织一看木已成舟，干脆在后来的规范里把 2 条连接这条禁令删得干干净净。\n\n但大家都在拼命堆带宽，网页为什么还是慢？\n2010 年，谷歌工程师迈克·贝尔什做了一组严密的网络测算，把底牌翻了出来：\n把带宽翻一倍，网页加载速度只提升大约 5%。\n但如果把往返延迟砍掉 20 毫秒，速度立刻提升 7% 到 15%。\n瓶颈从来不在马路有多宽。\n真正卡住速度的，是数据包在光纤里来回跑一趟要花多少时间。\n谷歌没有等标准委员会慢吞吞地开会，直接在 Chrome 浏览器里做了一套新协议 SPDY。\n它把多个请求压进同一条连接里并发传输，还能压缩报头。\n这套方案后来被标准委员会采纳，变成了 HTTP/2。\n结果新的矛盾又冒出来了。\n开源缓存系统 Varnish 的作者普尔-亨宁·坎普直接公开嘲讽：\n如果这是我班上学生交上来的协议设计作业，我会直接给不及格。\n他的担忧很快被现实验证了。\nHTTP/2 把所有请求塞进了一条单一的 TCP 管道。\n而在 TCP 的设计里，数据包必须按严格的顺序组装。\n只要中间丢了一个小包，整条连接就必须完全停下来等它重传，后面排队的所有网页资源全都跟着卡死在原地。\n这就是队头阻塞。\n网络顺畅时它飞快，一旦网络稍微有点波动，体验甚至不如老旧的 HTTP 1.1。\n\n要绕开 TCP 的先天缺陷，唯一的办法是换掉它。\n但全球的路由器、防火墙和操作系统内核，几十年来已经把 TCP 固化在硬件和系统里了。\n想让全世界的机房同步升级网络协议栈，根本不可能办到。\n谷歌工程师吉姆·罗斯金德想出了一个绝招：退回到无序的 UDP 协议。\nUDP 传输不管顺序，只管丢数据包，剩下的重传和拥塞控制全部交给浏览器自己在应用层算。\n这就是 QUIC，也是今天的 HTTP/3。\n它绕过了僵化的操作系统，把网络传输的主导权直接拿回到了应用层。\n今天全世界已经有超过五分之一的网页流量跑在它上面。\n\n但每一次技术升级，往往也附赠了全新的漏洞。\nHTTP/2 当年最自豪的一个功能，是允许浏览器随时单方面撤销请求。\n结果到了 2023 年 8 月，黑客用这个机制发动了一场席卷全球的快速重置攻击。\n攻击者一边疯狂建立请求，一边瞬间把它取消，每秒钟向目标轰出 3.98 亿次请求。\n两分钟内的攻击流量，超过了维基百科整整一个月的全球总访问量。\n谷歌、亚马逊和 Cloudflare 联合秘密排查了六个星期，才把这个窟窿补上。\n\n而今天最新的战场，变成了满世界抓取数据的 AI 爬虫。\n爬虫在抓取网页时，报头里的身份信息全是伪造的。\n面对这群不守规矩的访客，网络防护巨头 Cloudflare 翻出了 1992 年蒂姆·伯纳斯-李随手写在备选清单里的一个古老状态码：\nHTTP 402。\n它的定义是：需要付费。\n这个状态码在技术文档里沉睡了三十多年，现在终于被推到了台前，用来拦截那些只想白嫖数据的机器人。\n\n回过头看，1991 年在德州酒店里焊电线的那位发明人，其实从来没有得到他最初想要的万维网。\n他当年设想的网际空间，每一个读者同时也是随手修改网页的作者。\n但最终长成的世界，是那份 700 个单词的物理学小工具，被无数工程师、大厂和黑客一路修修补补，硬生生顶成了一座十万字规范的数字通天塔。\nCloudflare 现在每秒钟要处理超过 8000 万次 HTTP 请求。\n这套支撑着整个人类文明运转的数字基石，地基从来不是什么深思熟虑的宏大工程。\n剥开层层补丁，它里面依然跳动着当年那个最朴素的动作：\n给我这份文档。\n给你，拿好。\n从来没有人真正把它做完过，大家只是边打补丁边往前狂奔。","topic":"700个单词与三十年补丁：HTTP是如何靠权宜之计撑起整个互联网的","frame_type":["机制"],"citations":[],"channel_note":"","identity_notice":"","source_type":"generated","status":"published","generated_at":"2026-10-12 16:11:23","legal_anchor_count":0,"transcript_citation_count":0}