在URL中,//是做什么的?[关闭]


39

通常,当我看到时//,通常会遵循一些协议前缀,例如http:ftp:。我从未见过将它放置在其他任何地方。例如,

http://www.google.com/

是一个典型的URL。

但是,我发现以下两种语法可产生同一网站的不同版本,

http://www.weather.com/

http://www.weather.com//

我本以为//除协议规范之外的任何地方都是无效的。令我惊讶的是,我错了。 产生相同网站不同版本的结尾//是什么?

编辑:

该站点上的某个人一定已经吸引了对方,因为两个链接现在都位于同一页面上。


9
如果我不得不猜测,您所做的就是两次看到相同的网站,但是最后一个带有/的网站破坏了CSS或这些天来孩子用来格式化网站的方式。:)
马克·艾伦


1
@ MehperC.Palavuzlar回想起来,是的。但是在提出问题时,我认为范围比实际范围要宽一些。
乍得·哈里森

@MarkAllen好东西能吸引注意,使用///////在网址的结尾导致同一个站点/,其中// 没有导致不同的东西。
乍得·哈里森

同时,在Windows的统一命名约定中通常会看到双反斜杠(\\),例如\\HostName[@Port]\SharedFolder\Resource
William C

Answers:


67

开头//是URL语法的一部分。万维网的发明者为这个错误表示歉意

确实,如果您考虑一下,它不需要双斜杠。我本可以设计为不使用双斜杠。-互联网的发明者蒂姆·伯纳斯·李爵士


至于结尾//,实际上不是双斜线。第一个斜杠将主机名与路径分开。最后一个斜杠路径。Web服务器可以根据需要处理/与空路径不同的路径,而weather.com显然可以。至于这是偶然还是故意的,您必须向他们询问。


这很完整,因为您可以配置Web服务器以查找除Web根以外的索引!先生,我的帽子好了。
乍得·哈里森

您是说http://example.com可以和别人区别对待http://example.com/吗?我不认为第一个斜杠就是这种情况。
DisgruntledGoat 2012年

1
@DisgruntledGoat您可以,可以使用一些.htaccess规则。但是您可能不应该。
马修

1
您不能将其http://example.comhttp://example.com/Web服务器区别对待,因为它们都具有空路径。您可以在浏览器中对它们进行不同的处理。
大卫·史瓦兹

3
没关系,主机标头,零或一个斜杠都转换为相同的http请求GET / HTTP/1.1:: tools.ietf.org/html/rfc2616.html#section-3.2.3
SingleNegationElimination

19

最近,可以说双斜杠确实起作用。Google建议(例如,避免从安全页面意外调用不安全的内容),从嵌入式资源(样式表,js等)中省略协议

<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>

因此,现在很明显,这样的无协议URL是完全限定URL,而不是相对URL(以单个斜杠开头)。


1
这种样式称为“相对协议” URL / URI。关于SO也有类似的问题。
hippietrail 2012年

1
年代

13

要实际回答的问题,原来的规格得到协议http:(或可能ftp:gopher:mailto:news:telnet:wais:file:prospero:),那么一个// 以指示正在使用的统一资源定位符(URL)句法,则主机(任选地与前缀user:password@),则地址适当地从另一个开始/。这是在RFC 1738中提出的。

随着互联网的发展,Internet已http:成为主要协议,因此浏览器现在假设http://应该添加前缀,如果不存在的话。


3
您的答案似乎表明该协议可能曾经在URL上使用过URL以外的其他东西,并且还使用了//表明它正在使用的其他东西……是这样吗?
Izkata 2012年

3
@Izkata在80年代和90年代末期,当互联网开始运作时,针对各种物品建议了几种不同的格式。URL是URN的子集(请参阅RFC 3305),并且它们可以具有不同的格式,例如isbn:1-23-456789-12-3。在实践中,将http:其余部分定义为URL。RFC只是建议,通常允许从未实现的扩展。蒂姆·伯纳斯·李(Tim Berners-Lee)曾说过,该地址//用于“子网”(例如http:/govnet/whitehouse.gov)。这个想法从未被使用过,但是'//'仍然是现在很多代码所期望的并对其进行检查。
StarNamer 2012年

1
@Izkata:您可能不会看到与通讯协议一起使用的非URL URN;这就是//的目的。它指示该协议正在用于访问要在其中找到资源的(可能是远程的)网络位置。这里很多有其他数据部分,不使用其他URN年代//(您的浏览器可能识别“的mailto:”,例如)。参见:en.wikipedia.org/wiki/URI_scheme
KutuluMike 2012年

@MichaelEdenfield好吧,这就是我现在想知道的。是否曾经有过打算以不同方式使用它的点-可以通过相同协议进行通信的不同点。作为一个最原始的例子,可以在意向在同一时间一直是http://www.google.com/http:%/74.125.225.97/这两个是有效的,并//表示主机名,而别的东西一样%/表示一个IP地址?
Izkata 2012年

1
我不这么认为。至少我从未见过任何针对URL具有替代层次结构方案的文档草案/示例/等。我的印象一直是TBL只是想要一些东西,以使URL指向实际资源(而不是任意数据)变得很明显,并使用//使事情看起来像文件一样。我见过的所有其他样式的URN 的数据部分都没有特殊的前缀。某些协议确实允许这样做(例如,我认为是 telnet和gopher),但我从未见过针对http(s)的类似信息。
KutuluMike 2012年

1

我想补充一下大卫接受的答案:

尽管网络发明人道歉,但我认为双斜杠语法仍具有重要目的:在视觉上脱颖而出。使用双斜杠可以轻松直观地区分文本中没有超链接的URL。当您看到双斜杠时,您立即认为可以在浏览器窗口中输入它,类似于您认为包含@可以用来发送电子邮件。在向Web过渡的阶段中,这一时代的协议(ftp,telnet,gopher)具有自己的怪异概念来表示服务器地址或资源路径,很少是两者同时使用,这一点尤其重要。与双斜杠有关的大多数问题仍然存在,因为双斜杠是URL中最不明确的部分,请考虑端口号,百分比编码和区分大小写。但是拥有类似http:something.com之类的URL时,很容易将我的示例与此处:something.com混淆。另一方面,请看http://,它像钻石一样发光。双斜杠一直是Web象征主义的重要组成部分,我相信它即使在无意间也能加快其采用率。

由于AmigaOS使用文件路径语法,因此它们也可能使AmigaOS的工作更容易区分文件名和URL volume:path/to/destination。:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.