HTML链接的尾部斜杠

4

w3schools的文档表示:

在子文件夹地址中没有尾部斜杠时,可能会向服务器生成两个请求。许多服务器将自动添加尾部斜杠到地址,然后创建新请求。

这意味着什么并不清楚。在href链接中添加尾部斜杠有什么区别,是否有最佳实践关于添加尾部斜杠。


很惊讶这个问题没有更多的活动,我想可能是因为它被认为是一个重复的问题。 - JosephDoggie
1
这实际上不是一个重复的问题,因为另一个问题是在2016年提出的。我不确定为什么这个问题被标记为重复。 - Tarun Gupta
1
在考虑重复问题时,年龄通常并不重要,特别是如果两个问题都受到了类似的关注。 - Mark Rotteveel
2个回答

5

这是两个不同的URL:

http://example.com/foo
http://example.com/foo/

通常情况下,但并非总是如此,请求第一个URL将触发服务器以 301 永久重定向 的方式回复第二个URL。浏览器随后必须对第二个URL进行第二次请求。
当URL映射到服务器文件系统上的目录,并且正在加载index.html(或其他目录索引)时,这种情况最为常见。
内容动态生成的服务器(例如使用Perl Catalyst这样的MVC框架)不太可能这样做。在这种情况下,您需要更加注意链接到哪里,因为相对URL将从这两个URL中不同地解析。

1
那么服务器决定是否返回301,如果我们添加一个尾随空格会有什么区别呢? - Tarun Gupta
1
如果你包含尾随斜杠,那么你只会访问第二个URL。你不会尝试获取第一个URL。你也不会被告知应该获取第二个URL。这样可以节省一次请求和响应。 - Quentin

2
基本上,http://example.com/foohttp://example.com/foo/ 是两个完全不同的URL。最重要的是当查询这些URL时,服务器会如何响应这些URL。而服务器完全可以自行决定如何处理。 .../foo 可能会返回一个文件,而 .../foo/ 可能会返回一个目录列表。或者两者都可能返回一个目录列表,一个文件,或者相同的文件。或每次都返回一个随机的新响应。
W3S指出的是,许多服务器默认配置为对以斜杠结尾的规范版本返回重定向响应。这意味着,如果您从该服务器请求.../foo,它将重定向到.../foo/,这会导致您的客户端进行第二个请求.../foo/。服务器何时以及如何发出此重定向,完全取决于每个服务器,以及是否真的是一种流行的做法是值得怀疑的(就像W3S提到的所有内容一样)。
重要的是将URL指向您想要指向的位置。 .../foo 是正确的URL吗,因为它是一个文件?还是.../foo/ 是正确的URL,因为它是(虚拟)目录的根目录?你决定,确保你的服务器行为得当。

1
由于这是HTML文档的一部分,人们通常认为它会导致浏览器行为上的一些差异。 - Tarun Gupta
1
基本上,浏览器将../foo/和../foo视为两个不同的URL,而服务器可能会或可能不会这样做。 - Tarun Gupta
1
没错。在相对URL方面也有微妙的差别。bar 相对于 .../foo.../barbar 相对于 .../foo/.../foo/bar。这是浏览器端的逻辑。 - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接