使用基础标签时的相对URL斜线问题

11

我正在尝试了解在JSP中路径的解释方式。

当使用HTML基础标签与相对URL结合时,将base href以斜杠结尾是否很常见?

我问这个问题的原因是因为我经常需要在JSP中以上下文根的形式表达事物(例如表单操作),以便将表单路由到我在web.xml中映射的适当servlet。

大多数情况下,我会每次都使用${pageContext.request.contextPath},直到我了解到基础标签为止。

然而,我猜测,在JSP中,斜线被服务器解释为Web应用程序的根,因此我的基础标签不能是例如:

<base href="/foo"/>

然后在表单中有:

<form action="/extension">
...
</form>

既然这会导致表单提交到 mydomain.com/extension 而不是 mydomain.com/foo/extension 。我理解得对吗?由于斜杠具有特殊含义,您通常需要在基本HREF末尾加上反斜杠才能获得所需的效果,是这样吗?

谢谢。

1个回答

23

不完全是这样。

浏览器不仅仅是简单地连接您的基础href属性和相对URL。相反,<base>标签设置了文档基础URL,然后用于动态生成新路径。

您可以在WHATWG HTML规范中看到一个有趣的示例:

<base href="http://www.example.com/news/index.html">
<p>Visit the <a href="archives.html">archives</a>.</p>
请注意,href属性甚至以文件名结尾。
这意味着,如果您没有在基本href属性中添加尾随斜杠,则foo将被视为路径的最后一个不稳定部分,并且会被删除。比如说:
<base href="http://www.example.com/news/index.html" />
<img src="ball.png" /> <!-- GET http://www.example.com/news/ball.png -->

<base href="http://www.example.com/news/" />
<img src="ball.png" /> <!-- GET http://www.example.com/news/ball.png -->

<base href="http://www.example.com/news" />
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png -->

<base href="http://www.example.com/" />
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png -->

<!-- If served from http://www.example.com: -->
<base href="/" />
<img src="ball.png" /> <!-- GET http://www.example.com/ball.png  -->

但是这个例子不会带你到http://www.example.com/news/index.html/archives.html吗? - user1154644
那就是重点,它不会。它会带你到 example.com/news/archives.html - Denis
我明白了。那么使用以下代码的意图和通信方面,<base href="http://www.example.com/news/index.html"> 与 <base href="http://www.example.com/news"> 相比有什么优势呢?似乎后者更清晰明了。 - user1154644
还是你只是举例子,而在结尾使用index.html并不是你通常会看到的东西? - user1154644
那只是一个例子,我通常不会在结尾放置文件。但请注意,您的修正版本 example.com/news 现在将删除 news,因为您没有添加尾随斜杠。您需要使用 example.com/news/ - Denis
3
只是想让您知道,您回答中的链接已不再可用。 - ksadowski

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