为什么文件URL以3斜杠开头?


182

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

FTP同样如此。例如ftp://example.com

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

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


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

Answers:


14

正如其他人所提到的,文件架构的格式为“file:// <host> / <path>”。虽然大多数浏览器只有两个斜杠没有问题,这是正确的。

在所有条件相同的情况下,仅存在三斜杠和“localhost”关键字以确保符合有效的URI / URL语法。在文件模式的上下文中,主机没有意义,因为它直接从文件系统加载而没有任何显式传输协议或服务器文档路径。因为它不是HTTP,所以无法从标准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.该规范既没有定义也没有禁止访问非本地文件的机制。”


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

252

完整的语法是file://host/path

如果主机是localhost,则可以省略,导致file:///path

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

文件URL采用以下形式:

file://<host>/<path>

[...]

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


3
很酷,我没想到这个问题的答案是RFC标准!
Pacerier 2011年

33
@Pacerier几乎任何与互联网有关的事情都可以通过RFC解释(注意它们不一定是“标准”,但可以这样采用)。
懒惰2011年

5
请注意,Tim Berners Lee已为每个网址中的这两个斜杠道歉: news.bbc.co.uk/2/hi/technology/8306631.stm
Peter

7
我可以省略localhost其他协议,还是仅适用于file://
Agos

3
请注意,Firefox并不真正遵循这个标准`file:// test / C:\`的行为与`file:/// C:\`相同,而`http:/// test`将提供无效的URL错误
Earlz

27

丹尼斯解释第3斜线,从而分离出所需要hostpath,但其他两个是更有趣...

事实证明,它们对URL语法来说是无用且有点随意的。万维网的发明者,许多标准(包括丹尼斯所关联的RFC)的作者蒂姆·伯纳斯 - 李在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节中给出的语法使整个权限组件(包括双斜杠“//”)成为可选的。

什么时间活着。


2
TimBL在他的常见问题
Molomby

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

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

我很清楚这些,但我个人只在CSS中使用它们。在编写HTML时,我也使用该协议。没有真正的理由。除了可能是因为几年前HTML5 + CSS3首次成为“大牌”时,我看到的几乎所有网站都是这样的。
Cole Johnson

1
与您的答案所暗示的相反,file:/D:/Desktop/Book.pdf是根据RFC 8089(2017年起)的有效文件URI ,它在文件URI方面取代了RFC 1738(1994)。
ComFreek
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.