网络浏览器中的 SMB 地址处理:file:///// 还是 file://?

网络浏览器中的 SMB 地址处理:file:///// 还是 file://?

当 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/passwdfile:///C:/Windows。 (KDE 喜欢使用较短的版本。)

但是,如果在 URL 路径包含 UNC 路径(即如果 URL 中的服务器地址恰好以两个斜杠开头(例如,UNC 路径恰好以两个斜杠开头),那么 UNC 路径的服务器地址最终将成为 URL 中的新“权威”字段。

相关内容