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

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

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

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

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

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

答案1

正如其他人提到的,文件模式的格式为“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://datatracker.ietf.org/doc/html/draft-ietf-appsawg-file-scheme-03

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

答案2

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

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

RFC 1738 –统一资源定位器 (URL)

文件 URL 的格式如下:

file://<host>/<path>

[…]

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

答案3

host丹尼斯已经解释了需要将与 分开的第三个斜线path,但其他两个斜线更有趣......

事实证明,它们是对 URL 语法的无用且有些随意的添加。万维网的发明者兼许多标准(包括射频功能函数库丹尼斯 (Dennis) 链接的这篇文章,他在 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 节中给出的语法使整个权限组件(包括双斜杠“//”)成为可选的。

活着真好。

相关内容