通常,当我看到 时//
,它通常跟在某些协议前缀后面,如http:
或ftp:
。我从未见过它放在其他地方。例如,
http://www.google.com/
是一个典型的 URL。
然而,我发现以下两种语法会产生同一站点的不同版本,
我原本以为,//
除协议规范之外的任何地方都是无效的。令我惊讶的是,我错了。 结尾有什么特别之处//
导致同一地点出现不同版本?
编辑:
该网站上某个人肯定已经察觉了另一个链接,因为两个链接现在都指向同一个页面。
答案1
前导//
是 URL 语法的一部分。万维网的发明者为那个错误道歉。
真的,如果你仔细想想,它根本不需要双斜线。我本可以把它设计成不用双斜线的。——万维网发明者蒂姆·伯纳斯·李爵士
至于结尾的//
,它实际上不是双斜杠。第一个斜杠将主机名与路径分开。最后一个斜杠是路径。如果 Web 服务器愿意,它可以将路径/
与空路径区别对待,显然 weather.com 就是这样做的。至于这是无意的还是故意的,你必须问他们。
答案2
最近,有人认为双斜线做发挥一定作用。谷歌推荐(例如,为了避免意外地从安全页面调用不安全的内容)省略嵌入资源(样式表、js 等)中的协议,如下所示
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
因此现在很明显,这种无协议的 URL 是完全限定的 URL,而不是相对 URL(以单个斜杠开头)。
答案3
为了真正回答这个问题,原始规范给出了协议http:
(或可能是ftp:
,,,,,,gopher:
或),然后是mailto:
指示 正在使用统一资源定位器(URL)语法的主机(可选前缀为),然后是正确地址news:
,以另一个开头。这是在telnet:
wais:
file:
prospero:
//
user:password@
/
RFC 1738。
随着互联网的发展,http:
成为主导协议,因此浏览器现在假定http://
如果不存在前缀,则应该添加前缀。
答案4
我想补充一下戴维已经接受的答案:
尽管网络发明者对此表示歉意,但我认为双斜线语法发挥了重要作用:在视觉上脱颖而出。双斜线可以在没有超链接的文本中轻松区分 URL。当您看到双斜线时,您会立即想到它可以在浏览器窗口中输入,就像您认为包含的文本@
可用于发送电子邮件一样。在向网络过渡的阶段,这一点尤为重要,因为那个时代的协议(ftp、telnet、gopher)有自己奇怪的概念来表示服务器地址或资源路径,很少同时表示两者。与双斜线相关的大多数问题仍然存在,因为双斜线是 URL 中最不隐晦的部分,想想端口号、百分比编码和区分大小写。但是,像 http:something.com 这样的 URL 很容易与我这里的示例:something.com 混淆。另一方面,看看 http://,它是如何像钻石一样闪耀的。双斜线一直是网络符号的重要组成部分,我相信它也加速了它的采用率,即使它是无意的。
由于 AmigaOS 使用文件路径语法,它们也可能使 AmigaOS 的工作更容易区分文件名和 URL volume:path/to/destination
。:)