为什么我在浏览器中的文件 URL 中输入多个斜线时没有错误?

为什么我在浏览器中的文件 URL 中输入多个斜线时没有错误?

在我的 Windows 10 机器上,我可以输入本地目录的文件 URL(例如file:///D:/temp)或本地文件(例如file:///D:/temp/homepage.html),一切正常。

但是,只要这些有效 URL 中有正斜杠,我就可以插入更多正斜杠,一切仍然正常。例如:

file:///D://///////////////////temp///////////////MiscTests///////

另请参见 Chrome 的屏幕截图:

起初我以为这是 Chrome 的一个错误,但 Opera、Edge 和 Firefox 也存在同样的事情,所以我认为该 URL 是完全有效的。

作为一个相关问题,值得注意的是,这些浏览器还允许在 Web URL 中使用多个斜杠(例如https:///////////////////www.amazon.com),尽管在这种情况下,地址栏中的 URL 会被更正为https://www.amazon.com。因此,不仅仅是文件 URL 允许使用多个斜杠。

浏览器允许使用所有这些斜线是否有充分的理由,或者这是某些无法纠正的规范的疏忽?

答案1

RFC3986,第 3.3 节表示 URL 中的多个斜杠有效。

URL 中的/决定了 URL 的分段位置。双斜杠(位于授权分隔符(即第一个//)之外)将产生一个空段,根据RFC 2396可能会被忽略。从技术上讲,Web 服务器可能会对此抛出异常,但用户希望 Web 服务器能够处理此类事情,因此它会忽略它。

顺便说一句,这也发生在 Unices 上(网络可以说是仿照它的):

单一 Unix 规范第 3.266 节定义多个斜线可以被视为一个:

用于标识文件的字符串。在 IEEE Std 1003.1-2001 的上下文中,路径名最多由 {PATH_MAX} 个字节组成,包括终止空字节。它有一个可选的开头斜杠,后跟零个或多个以斜杠分隔的文件名。路径名可以可选地包含一个或多个尾部斜杠。多个连续的斜杠被视为与一个斜杠相同。

相关内容