3

我在服务器端找到了很多关于带有尾随斜杠的相对路径问题的答案,但在客户端却没有。帮帮我。

我正在编写一个网络爬虫来获取一组网站的统计数据,并且遇到了问题。我正在使用的一个网站有一个带有斜杠的相对路径的导航栏,并打算将这些路径视为绝对路径,如下所示:

在页面上http://www.example.com/foo/bar

导航栏链接地址 -> foo/, baz/,quox/

预期的绝对网址 -> http://www.example.com/foo/, http://www.example.com/baz/,http://www.example.com/quox/

问题是,据我所知,这是非标准行为——但 Firefox 和 Chrome 都将这些路径视为绝对路径。根据RFC 1808RFC 2396,这些应该像相对路径一样处理,如下所示:

规范正确的绝对网址 -> http://www.example.com/foo/foo/, http://www.example.com/foo/baz/,http://www.example.com/foo/quox/

特别是在 RFC 1808 中的第 5.1 节和 RFC 2396 中的 C.1 节中,第 4 个示例显示了这种情况被特别视为相对路径。在我正在编写爬虫的 Ruby 中,Addressable gem根据规范处理这些。

更糟糕的是,有问题的服务器很乐意为这些路径返回 200 OK,并且所有路径都有这个导航栏:所以我最终爬取http://www.example.com/foo/了与 相同的页面http://www.example.com/foo/foo/http://www.example.com/foo/foo/foo/依此类推,组合成奇怪的 URL,如http://www.example.com/foo/baz/quox/foo/

那么问题来了:我是否遗漏了一些允许 Chrome 和 Firefox 都将这些 url 解释为绝对路径的东西?有什么方法可以消除规范正确且绝对路径是预期的情况?

4

1 回答 1

1

必须在元素<base>内部定义一个标签<head>,用于指定页面中相对路径的基本 URL。

RFC-1808

于 2015-05-19T12:41:04.837 回答