我有两个网址:
http://example.com/foo
和
http://example.com/foo/
它们是不同的网址还是相同的?同样的问题是关于FTP协议(ftp://example.com/foo[/])
答案 0 :(得分:3)
是的,它们是不同的资源。
这在HTML中尤为重要。
如果您有相对链接bar
(<a href="bar">blah</a>
):
在https://www.example.com/foo
中,该链接解析为https://www.example.com/bar
在https://www.example.com/foo/
中,该链接解析为https://www.example.com/foo/bar
但HTTP服务器通常会将https://www.example.com/foo
重定向到https://www.example.com/foo/
以避免这种混淆。
使用FTP协议,它可能是特定于客户端的,因为FTP协议本身不适用于URL。
因此,当https://www.example.com/foo
实际上是文件夹时,如果使用foo
,则取决于FTP客户端的行为方式。在这种情况下,“FTP客户端”通常表示Web浏览器,因为它们与URL一起使用。专用FTP客户端通常也不能使用URL。
答案 1 :(得分:3)
在URI标准中,相关部分为Normalization and Comparison:
执行simple string comparison后,这些URI不等效。
应用syntax-based normalization后,这些URI不等效。
对于scheme-based normalization,您必须参考http
/ https
和ftp
URI方案的规范,并检查是否有任何特定于方案的规则定义如下:
对于http
/ https
,这些规则位于http and https URI Normalization and Comparison部分,似乎没有任何适合您的情况。
对于ftp
,似乎没有定义任何规范化/比较规则。
对于protocol-based normalization,您必须考虑重定向等问题(如果是http
)。
tl; dr: URI 不等于。
请注意,HTTP(S)URI中的空路径不是这种情况,因为上面链接的部分定义了:
[...]空路径组件相当于“/”[...]
的绝对路径
因此以下URI 等同于:
http://example.com/
http://example.com
顺便说一句,对于基于协议的规范化,标准以您的情况为例:
[...]例如,如果他们观察到诸如
之类的URIhttp://example.com/data
重定向到仅在尾部斜杠
中不同的URI他们可能会认为这两者在未来是等价的。 [...]http://example.com/data/