
一个拼写错误是如何让整个互联网一起犯错的
web http javascript html history internet www referer rfc
引言
- 在 Web 领域, 有一个重要的协议, 超文本传输协议 (Hypertext Transfer Protocol, HTTP), 这个协议规定了在互联网上的网页等内容的基本的传输方式, 是一个应用层协议 🤝
- 如果你接触互联网, 那你一定使用了这个协议, 你现在浏览的网页或视频, 就是通过 HTTP 或者套了一层 SSL/TLS 加密的 HTTPS 传输的 🔒. 不信, 看一眼上面的地址栏或点击分享复制链接, 一定是
https://开头的内容
- 众所周知, 世界是一个巨大的草台班子 🌿, 在 HTTP 最初的规范 RFC 1945 中, 一个『明显』的拼写错误, 就被写入了正式的规范中, 并由于『历史原因』流传至今

只有请求标头有错的 Referer
- 这个拼写错误存在于最常见的请求标头中, 叫做
Referer, 很明显正确应拼写为Referrer, 但事实是就这么拼错了
- 一个常规的 HTTP 请求可能是下面这样
GET / HTTP/1.1
Accept: */*
Host: space.bilibili.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64)
Referer: https://www.bilibili.com/
- 根据文档定义和浏览器的实际行为,
Referer代表这次请求的引用来源. 默认为上一个网页的 URL, 当然这也可以被 Referrer Policy 或浏览器设置缩短或移除, 注意这个拼写是正确的
别人却又都是对的
- 同样是 Web 的一部分, 实际上只有 HTTP 的
Referer, 是拼写错误的, 而别处却又都正确了
- 如 JavaScript Web API 中的 DOM API,
document.referrer, 这里是对的
- 如 HTML 中, 像
<a><img>这些元素, 有属性referrerpolicy, 也是正确的
你的错大家共担
- 有趣的是, 在 cURL 中, HTTP 的
--referer选项为了『符合标准』, 也『故意』拼错了
- 对于一个英语或非英语者, 人难免会犯错, 改不了就将错就错, 大家要开放包容嘛
- 如今 Web 自 HTTP 和 WWW 以来已经走过了 30 余年, 技术虽更新换代但核心未变, 这是十分可贵的, 值得我们每一个用户和开发者共同珍惜和维护
参考资料
这文章好水