所以我一直在玩一些网络抓取工具并在不同的网站上测试它们。但是我发现一些看起来像他们的相对网址不应该工作的网站,或者至少我认为他们应该指向除了浏览器解析它们之外的某个地方。
给出当前页面的网址:“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标记吗?
答案 0 :(得分:4)
你是正确的,因为它是base
标签,是的,它是有效的。
在HTML中,链接和对外部图像,applet的引用, 表格处理程序,样式表等总是由a指定 URI。根据基URI来解析相对URI,基URI可以 来自各种渠道。 BASE元素允许作者 明确指定文档的基本URI。
当存在时,BASE元素必须出现在一个的HEAD部分 HTML文档,在引用外部源的任何元素之前。 BASE元素指定的路径信息仅影响URI 在元素出现的文档中。
答案 1 :(得分:3)
该网站可能使用<base>
标记将父级指定为网站上所有相对网址的前缀。
您可以在基本标记here上找到更多信息。如果不是这种情况,请提供源URL,因为这违反了正常行为。