我想了解如何使用
<base href="" />
在我的网络爬虫中进行设置,因此我尝试使用不同浏览器的几种组合,最终发现有双斜杠的东西我不太明白。
如果你不想阅读全部内容,请跳转到D和E的测试结果。所有测试演示如下:
http://gutt.it/basehref.php
下面是我调用http://example.com/images.html
的测试结果:
A - 多个base href
<html>
<head>
<base target="_blank" />
<base href="http://example.com/images/" />
<base href="http://example.com/" />
</head>
<body>
<img src="/images/image.jpg">
<img src="image.jpg">
<img src="./image.jpg">
<img src="images/image.jpg"> not found
<img src="/image.jpg"> not found
<img src="../image.jpg"> not found
</body>
</html>
结论
- 只有第一个带有
href
属性的<base>
标签有效 - 以
/
开头的资源指向根目录 ../
表示上一级目录
B - 不带尾部斜杠
<html>
<head>
<base href="http://example.com/images" />
</head>
<body>
<img src="/images/image.jpg">
<img src="image.jpg"> not found
<img src="./image.jpg"> not found
<img src="images/image.jpg">
<img src="/image.jpg"> not found
<img src="../image.jpg"> not found
</body>
</html>
结论
<base href>
会忽略最后一个斜杠后面的所有内容,因此http://example.com/images
会变成http://example.com/
C - 应该这样
<html>
<head>
<base href="http://example.com/" />
</head>
<body>
<img src="/images/image.jpg">
<img src="image.jpg"> not found
<img src="./image.jpg"> not found
<img src="images/image.jpg">
<img src="/image.jpg"> not found
<img src="../image.jpg"> not found
</body>
</html>
结论
- 与测试B的结果相同,符合预期
D - 双斜线
<html>
<head>
<base href="http://example.com/images//" />
</head>
<body>
<img src="/images/image.jpg">
<img src="image.jpg">
<img src="./image.jpg">
<img src="images/image.jpg"> not found
<img src="/image.jpg"> not found
<img src="../image.jpg">
</body>
</html>
E - 添加空格的双斜线
<html>
<head>
<base href="http://example.com/images/ /" />
</head>
<body>
<img src="/images/image.jpg">
<img src="image.jpg"> not found
<img src="./image.jpg"> not found
<img src="images/image.jpg"> not found
<img src="/image.jpg"> not found
<img src="../image.jpg">
</body>
</html>
这两个URL都不是“有效”的,但却是我的网络爬虫的真实结果。请解释一下D和E中发生了什么事情,以便可以找到../image.jpg
,以及为什么会因为空格而导致差异?
仅供您参考:
<base href="http://example.com//" />
与测试C相同<base href="http://example.com/ /" />
完全不同。只能找到../image.jpg
<base href="a/" />
只能找到/images/image.jpg