当 SMB 共享路径为 时\\server\dir
,如果我在 FireFox 中输入该路径,FireFox 会显示目录的内容,显示的地址为file://///server/dir
。如果我使用 Edge 执行此操作,它也会显示内容,但地址为file://server/dir/
。
有什么区别?一个是对的,一个是错的吗?
答案1
两者在语法上都是有效的,我不确定是否有任何规范规定一个版本是更正确比其他的都要多。
Firefox 的版本有一个空的“权限”字段,并将整个 UNC 路径放在“路径”字段中,暗示 UNC 路径是“本地”路径——这是可以接受的,因为 Firefox 可以访问它就像本地路径(即仅使用标准 OS 文件操作),而无需解析或理解原始 UNC 路径的组成部分。
file: // / C:/Windows
file: // / //server/dir
^-- the actual OS-level path
^-- URL path prefix
^-- URL authority prefix
^-- URL scheme
这最新标准对于file:
URL(主要规范现有的临时做法)允许这种用法,其规定如下:
在本文档中,“本地文件”一词用于描述文件可以通过本地文件系统 API 访问仅使用文件路径中包含的信息,而不依赖于其他信息(例如网络地址)。需要注意的是,本地文件可能不在物理上位于本地计算机上,例如,如果网络文件系统透明地安装到本地文件系统中。
(请记住,大多数类 Unix 系统没有与远程文件的“UNC 路径”等效的东西——NFS 或 SMB 文件共享必须手动安装到用户选择的路径上,然后才能访问,并且一旦安装到位,NFS 安装中的路径看起来与本地路径完全一样。因此,要求使用file://<hostname>/
URL 作为远程路径将非常困难。)
但行为非本地 file:
URL 根本不是规范的一部分——它完全是由实现定义的。所以微软的解释就是有浏览器理解UNC 路径的组成部分并将它们 1:1 映射到文件 URL 的相应字段(因为它们具有非常相似的语义),这也是可以接受的。
file: // server /dir
^-- URL path
^-- URL authority
^-- URL authority prefix
^-- URL scheme
请注意,URL 中的“authority”字段在语法上是可选的 - 它的存在由两个前导斜杠表示;完全本地路径可以指定为file:/etc/passwd
或 ,file:C:/Windows
而不是更常见的file:///etc/passwd
或file:///C:/Windows
。 (KDE 喜欢使用较短的版本。)
但是,如果在 URL 路径包含 UNC 路径(即还如果 URL 中的服务器地址恰好以两个斜杠开头(例如,UNC 路径恰好以两个斜杠开头),那么 UNC 路径的服务器地址最终将成为 URL 中的新“权威”字段。