为什么这个相对URL有效?

时间:2014-02-04 02:18:32

标签: html url

所以我一直在玩一些网络抓取工具并在不同的网站上测试它们。但是我发现一些看起来像他们的相对网址不应该工作的网站,或者至少我认为他们应该指向除了浏览器解析它们之外的某个地方。

给出当前页面的网址:“http://www.examplesite.com/a/page.htm” 以及一个链接:“a / page2.htm”

浏览器正确解析为:“http://www.examplesite.com/a/page2.htm

我的问题/感觉(显然是错误的,但我想知道为什么)是这应该解决为“http://www.examplesite.com/a/a/page2.htm”。相对网址不以/开头,为什么它会成为基础相对的?

有趣的是,Java的URL类似乎与我一致,因为下面的代码将输出:“http://www.examplesite.com/a/a/page2.htm

URL baseUrl = new URL("http://www.examplesite.com/a/page.htm");
URL absoluteURL = new URL(baseURL,"a/page2.htm");

为什么这个链接会解决它的问题,解决像这样的相对链接的正式规则是什么?

编辑:

我只是注意到在网页的<head>部分有一个类似的字段:

<base href="http://examplesite.com/">

我假设这会覆盖任何相对链接,将其用作基本网址而不是实际网址。这是正确的假设吗?这甚至是一个有效的HTML标记吗?

2 个答案:

答案 0 :(得分:4)

你是正确的,因为它是base标签,是的,它是有效的。

  

在HTML中,链接和对外部图像,applet的引用,   表格处理程序,样式表等总是由a指定   URI。根据基URI来解析相对URI,基URI可以   来自各种渠道。 BASE元素允许作者   明确指定文档的基本URI。

     

当存在时,BASE元素必须出现在一个的HEAD部分   HTML文档,在引用外部源的任何元素之前。   BASE元素指定的路径信息仅影响URI   在元素出现的文档中。

来源:W3C WikiW3C Markup

答案 1 :(得分:3)

该网站可能使用<base>标记将父级指定为网站上所有相对网址的前缀。

您可以在基本标记here上找到更多信息。如果不是这种情况,请提供源URL,因为这违反了正常行为。