HTTP以两个斜杠开头。例如。 http://example.com

FTP也一样。例如。 ftp://example.com

但是,文件“ URL”以三个斜杠开头。例如。使用chrome读取pdf文件时,URL为file:///D:/Desktop/Book.pdf

为什么文件URL使用三个斜杠?

评论

Opera for Windows会自动将其扩展到file:// localhost / D:/ Desktop /。

另请参阅stackoverflow.com/q/22772897/632951

#1 楼

就像其他人提到的那样,文件模式的形式为“ file:// / ”。尽管大多数浏览器都不会出现两个斜杠的问题,这是正确的。

在所有条件都相同的情况下,三重斜杠和“ localhost”关键字仅存在以确保符合有效的URI / URL语法。在文件模式的上下文中,主机是没有意义的,因为它直接从文件系统加载,而没有任何显式的传输协议或服务器文档路径。由于不是HTTP,因此无法从标准Web服务器加载,理论上您可以在该Web服务器上设置多个本地虚拟主机。而且,由于浏览器仅使用诸如“ file:/// volumes / foo”之类的卷名,因此它无法从技术上说是另一个“主机”的标准网络卷中加载。最后,尝试“ file://example.com/some/file”之类的操作无效。支持外部主机可能有一定的原因,但我想不出任何理由。

IETF当前正在起草更改以删除三斜杠要求,尽管该草案还增加了一些奇怪的可能性就像file:c|/path甚至file://///host.example.com/path一样。


https://tools.ietf.org/html/draft-ietf-appsawg-file-scheme-03

“ 3.本规范既没有定义也没有禁止访问非本地文件的机制。“


评论


该草案已在2017年成为RFC 8089,其中仍包含您的报价。

– ComFreek
19 Mar 7 '19 at 10:46

#2 楼

完整语法为file://host/path

如果主机为localhost,则可以将其省略,从而生成file:///path

请参阅RFC 1738-统一资源定位符(URL):


文件URL的格式为:

file://<host>/<path>


[…]

作为一种特殊情况, <host>可以是字符串“ localhost”或空的
字符串;这被解释为“从中解释URL的机器”。


评论


太好了,我没想到这个问题的答案会是RFC标准!

–起搏器
2011-10-30 14:47

@Pacerier几乎所有与Internet有关的事情都可以通过RFC进行解释(请注意,它们不一定是“标准”,而是可以这样采用)。

–slhck
2011-10-30 14:53

请注意,蒂姆·伯纳斯·李(Tim Berners Lee)为每个网址中的两个斜杠表示歉意:news.bbc.co.uk/2/hi/technology/8306631.stm

–彼得
2011年10月31日19:56

我是否也可以从其他协议中省略本地主机,或者它仅适用于file://?

–前
2011年11月1日,11:34

请注意,Firefox并没有真正遵循此标准,`file:// test / C:\`的行为与`file:/// C:\`相同,而`http:/// test`将给出无效的URL错误

–埃尔兹
2011年11月1日15:02



#3 楼

丹尼斯(Dennis)解释了将hostpath分开所需的第三个斜杠,但是其他两个斜杠更有趣...

事实证明,它们是对URL语法的无用且有些武断的补充。万维网的发明者和许多标准(包括丹尼斯链接的RFC)的作者蒂姆·伯纳斯·李(Tim Berners-Lee)在2009年的一次采访中对他使用“双斜杠”表示遗憾。


http://bits.blogs.nytimes.com/2009/10/12/the-webs-inventor-regrets-one-small-thing/

因此,除了18年前的轻微预见性错误(不具有特征)之外,您的文件URL可能只是file:/D:/Desktop/Book.pdf而不是file:///D:/Desktop/Book.pdf

回答您的问题,URL没有3个斜杠是没有充分的理由的。


更新:正如@ComFreek在评论中指出的那样, 2017年,上面的file:/D:/...示例现在有效!这要感谢RFC 8089,它专门从以前的标准中调出了此修复程序...


根据[RFC1738]中的定义,文件URL总是开始的
标记为“ file://”,后跟(可选为空白)主机名
和“ /”。第2节中给出的语法使整个权限
组件,包括双斜杠“ //”(可选)。


还活着什么时间。

评论


TimBL在他的常见问题中也对此进行了详细说明

– Molomby
2012-09-25 8:32

更不用说仅通过使用http:example.com而不是http://example.com可以节省2个字节。这看起来可能并不多,但是它们加起来了。 Google每天收到数百万次搜索。一个页面上有多少个链接?至少20个。这意味着对于一百万次搜索,如果不需要斜杠,则可以节省20 MB的带宽。

–科尔·约翰逊(Cole Johnson)
2014年5月25日0:23

@ColeJohnson-您知道您也可以省略协议部分吗?因此,可以将http://example.com链接为//example.com,该文档通过http传输。它称为协议相对URL,所有浏览器都支持它们。

– Molomby
14年6月13日在3:08

我很清楚这些,但是我个人仅在CSS中使用它们。编写HTML时,我也使用该协议。确实没有真正的原因。除了可能是因为几年前HTML5 + CSS3首次“流行”时,我浏览的几乎所有网站都是这样。

–科尔·约翰逊(Cole Johnson)
14年6月13日在4:18

与您的答案可能相反,file:/ D:/Desktop/Book.pdf是有效的文件URI(根据RFC 8089(自2017年开始)),该文件在文件URI方面取代了RFC 1738(1994)。

– ComFreek
19 Mar 7 '19 at 11:03