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

Pac*_*ier 198 browser url filesystems

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

FTP 也是如此。例如ftp://example.com

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

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

Den*_*nis 269

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

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

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

文件 URL 采用以下形式:

file://<host>/<path>
Run Code Online (Sandbox Code Playgroud)

[…]

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

  • @Pacerier 几乎*任何与互联网有关的*都可以通过 RFC 来解释(请注意,它们不一定是“标准”,但可能会被采用)。 (34认同)
  • 我也可以从其他协议中省略 `localhost` 还是它只适用于 `file://`? (7认同)
  • 请注意,蒂姆·伯纳斯·李 (Tim Berners Lee) 为每个 URL 中的 2 个斜杠道歉:http://news.bbc.co.uk/2/hi/technology/8306631.stm (5认同)
  • 酷,我没想到这个问题的答案是 RFC 标准! (3认同)
  • 请注意,Firefox 并没有真正遵循这个标准 `file://test/C:\` 的行为与 `file:///C:\` 和 `http:///test` 将给出一个无效的 URL错误 (3认同)
  • @slhck thx 的信息 =) 顺便说一句,我想知道这个问题有一段时间了,但图片@ http://qweop.com/x3 有什么用? (2认同)
  • 也许有人应该写一篇关于这个的博客文章,更详细地解释这些东西是如何工作的? (2认同)

Mol*_*mby 31

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

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

Berners-Lee 先生解释说,虽然双斜线在当时是一种编程约定,但事实证明并不是真正必要的。看看所有的纸张和树木,他说,如果人们多年来不必在纸上写下或打出那些斜线,本可以保存的——更不用说人力和时间花费在这两个按键上的无数次浏览器地址框中的时间。

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 在他的 [FAQ](http://www.w3.org/People/Berners-Lee/FAQ.html#etc) 中也详细说明了这一点 (2认同)
  • 更不用说仅使用 `http:example.com` 而不是 `http://example.com` 就可以节省 2 个字节。它可能看起来不多,但它们加起来。Google 每天收到 _百万_ 次搜索。一个页面上有多少个链接?至少 20。这意味着对于一百万次搜索,如果不需要斜线,可以节省 20 MB 的带宽。 (2认同)
  • 与您的答案可能暗示的相反,`file:/D:/Desktop/Book.pdf` 是一个有效的文件 URI,根据 [RFC 8089](https://tools.ietf.org/html/rfc8089#section-2 )(从 2017 年开始),在文件 URI 方面取代了 [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt) (1994)。 (2认同)

Bee*_*jor 20

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

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

IETF 目前正在起草更改以删除三斜线要求,尽管草案还增加了一些奇怪的可能性,例如file:c|/pathfile://///host.example.com/path

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

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