<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>URL on 小盒子的技术分享</title><link>https://xiaobox.github.io/tags/url/</link><description>Recent content in URL on 小盒子的技术分享</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 07 Jul 2026 13:15:06 +0000</lastBuildDate><atom:link href="https://xiaobox.github.io/tags/url/index.xml" rel="self" type="application/rss+xml"/><item><title>为什么网址里要写两个斜杠？</title><link>https://xiaobox.github.io/p/2026-07-07-wei-shen-me-wang-zhi-li-yao-xie-liang-ge-xie-gang/</link><pubDate>Tue, 07 Jul 2026 13:15:06 +0000</pubDate><guid>https://xiaobox.github.io/p/2026-07-07-wei-shen-me-wang-zhi-li-yao-xie-liang-ge-xie-gang/</guid><description>&lt;p&gt;&lt;img alt="为什么网址里要写两个斜杠封面图" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/ab5e96e3-ab03-4aaf-8018-35b4e301081c-1.png"&gt;&lt;/p&gt;
&lt;p&gt;你打开浏览器，在地址栏里敲下一个网址。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://www.google.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;看到那两个斜杠了吗，就夹在 &lt;code&gt;https:&lt;/code&gt; 和 &lt;code&gt;www&lt;/code&gt; 中间的那对 &lt;code&gt;//&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;你每天都在看它，复制它，粘贴它。但你大概从来没停下来想过，这两道杠到底是干什么的。&lt;/p&gt;
&lt;p&gt;咱们把一个完整的网址拆开看看。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://www.example.com/path/to/page&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https&lt;/code&gt; 是协议，告诉浏览器用什么方式去请求资源。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;www.example.com&lt;/code&gt; 是主机名，告诉浏览器去找哪台服务器。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/path/to/page&lt;/code&gt; 是路径，告诉服务器你具体要哪个东西。&lt;/p&gt;
&lt;p&gt;那 &lt;code&gt;//&lt;/code&gt; 呢？&lt;/p&gt;
&lt;p&gt;在 URI 的规范里（RFC 3986），&lt;code&gt;//&lt;/code&gt; 后面跟着的部分叫 authority，翻译过来就是「谁来响应你这个请求」。&lt;code&gt;//&lt;/code&gt; 是它的开头标记，用来把协议名和主机名隔开。&lt;/p&gt;
&lt;p&gt;你可以把它想成一个路标。路标本身不是目的地，但它告诉你，从这里开始，后面写的是服务器的名字了。&lt;/p&gt;
&lt;p&gt;问题在于，这个路标不是非它不可。&lt;/p&gt;
&lt;p&gt;1989 年，Tim Berners-Lee 在 CERN 设计 URL 语法。路径部分的斜杠 &lt;code&gt;/&lt;/code&gt; 直接照搬了 Unix 的文件路径写法，这很自然，用过 Unix 的人一看就懂。&lt;/p&gt;
&lt;p&gt;但 &lt;code&gt;//&lt;/code&gt; 这个双斜杠，不是他自己想出来的。&lt;/p&gt;
&lt;p&gt;他从一台叫 Apollo Domain 的工作站上抄来的。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/20260707212723098.png"&gt;&lt;/p&gt;
&lt;p&gt;Apollo 是 1980 年代的一款高端工作站。它的操作系统有个在当时很前沿的能力，可以直接在文件路径里访问网络上其他机器的文件，不用额外装什么传输工具。语法长这样，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//machine_name/path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;两个斜杠开头，后面跟机器名，再接文件路径。双斜杠的作用是告诉系统，「注意，这不是本地目录，是另一台机器」。&lt;/p&gt;
&lt;p&gt;Berners-Lee 在 CERN 接触过这种工作站，觉得这个写法挺清楚的，就直接搬过来用了。他自己后来也说过这件事，原话是「I just copied Apollo」。&lt;/p&gt;
&lt;p&gt;于是 &lt;code&gt;http://&lt;/code&gt; 后面那两个斜杠，就这么定下来了。&lt;/p&gt;
&lt;p&gt;你可能会问，那不用 &lt;code&gt;//&lt;/code&gt; 行不行？&lt;/p&gt;
&lt;p&gt;完全可以。&lt;/p&gt;
&lt;p&gt;你看 &lt;code&gt;mailto:someone@example.com&lt;/code&gt;，这也是一个合法的 URI，没有 &lt;code&gt;//&lt;/code&gt;。因为发邮件不需要去找一台服务器，邮件地址本身就够了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tel:+8613800138000&lt;/code&gt;，打电话，也没有。你可以在浏览器里敲这个号码，浏览器会直接呼叫你的电话应用。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/20260707212820662.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;data:text/html,&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;&lt;/code&gt;，更极端。你可以把这行直接粘到浏览器地址栏试试。&lt;/p&gt;
&lt;p&gt;浏览器会渲染出一个大标题。整个「网页」就是这行地址本身，没有服务器，没有网络请求。&lt;/p&gt;
&lt;p&gt;再试这个，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;data:text/html,&amp;lt;marquee&amp;gt;hello world&amp;lt;/marquee&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;四个字在屏幕上滚来滚去。&lt;code&gt;marquee&lt;/code&gt; 是上古时代的 HTML 标签，W3C 早就不推荐了，但浏览器到今天还认它。一个被标准抛弃了二十年的标签，靠一行 URL 复活了。&lt;/p&gt;
&lt;p&gt;还有更离谱的，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;data:text/html,&amp;lt;input type=&amp;quot;color&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;你会看到一个颜色选择器凭空冒出来。一个可以点击、可以交互的完整控件，藏在一行 URL 里，背后什么都没有。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/20260707212928724.png"&gt;&lt;/p&gt;
&lt;p&gt;你可能还听说过 &lt;code&gt;javascript:&lt;/code&gt; 开头的地址，可以直接在浏览器里跑代码。不过现代浏览器已经不让你从地址栏粘贴 &lt;code&gt;javascript:&lt;/code&gt; 了，手动敲可以，粘贴会被吞掉。浏览器怕你被人忽悠着粘一段恶意脚本进去。&lt;/p&gt;
&lt;p&gt;规律到这里就很清楚了。需要找服务器的协议才有 &lt;code&gt;//&lt;/code&gt;，HTTP 有，FTP 有，SSH 有。不需要的，mailto 没有，tel 没有，data 没有，javascript 也没有。&lt;code&gt;//&lt;/code&gt; 不是 URI 的默认配置，而是「我要连一台机器」时才亮的信号灯。&lt;/p&gt;
&lt;p&gt;再看一个更逗的，&lt;code&gt;file:///Users/xxx/Desktop/test.html&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;数一下，三个斜杠。前两个是 &lt;code&gt;//&lt;/code&gt;，标记 authority 的位置。但本地文件没有远程服务器，authority 是空的，&lt;code&gt;//&lt;/code&gt; 后面直接接上了路径开头的 &lt;code&gt;/&lt;/code&gt;。三道杠挤在一起，看着有点滑稽，语法上却完全正确。就好像你写了一个「收件人」，但后面跟的是你自己家地址。&lt;/p&gt;
&lt;p&gt;前端开发的同学可能还见过一种更骚的写法，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;script src=&amp;quot;//cdn.jquery.com/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;URL 开头直接就是 &lt;code&gt;//&lt;/code&gt;，连协议名都没有。浏览器看到这种写法会自动继承当前页面的协议，页面是 HTTPS 就用 HTTPS 请求，页面是 HTTP 就用 HTTP。这个技巧在 2010 年前后很流行，当时很多网站在 HTTP 和 HTTPS 之间来回切，写死协议容易出问题。&lt;/p&gt;
&lt;p&gt;现在基本见不到了，全世界都上了 HTTPS。但这种写法能存在，恰恰说明 &lt;code&gt;//&lt;/code&gt; 在 URI 语法里的角色有多独立。它不依附于任何协议名，只做一件事，宣告「后面是服务器」。&lt;/p&gt;
&lt;p&gt;有意思的是，现在大多数浏览器已经不显示 &lt;code&gt;https://&lt;/code&gt; 了。Chrome 藏了，Safari 也藏了。你盯着地址栏看，只能看到一个干净的域名。想看完整的 URL，需要单独设置。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/20260707213204292.png"&gt;&lt;/p&gt;
&lt;p&gt;当年 Berners-Lee 道歉说，这两个字符浪费了太多纸和墨水。他大概没想到，最后的解法不是从规范里删掉它们，而是在界面上假装它们不存在。&lt;/p&gt;</description></item></channel></rss>