【发布时间】:2013-03-04 13:42:17
【问题描述】:
我在服务器端找到了很多关于带有尾随斜杠的相对路径问题的答案,但在客户端却没有。帮帮我。
我正在编写一个网络爬虫来获取一组网站的统计信息,但遇到了问题。我正在使用的一个网站有一个带有斜杠的相对路径的导航栏,并打算将这些路径视为绝对路径,如下所示:
在页面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 1808和RFC 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 解释为绝对路径的东西?有什么方法可以消除规范正确且绝对路径是预期的情况?
【问题讨论】:
标签: html url web-crawler