我在服务器端找到了很多关于带有尾随斜杠的相对路径问题的答案,但在客户端却没有。帮帮我。
我正在编写一个网络爬虫来获取一组网站的统计数据,并且遇到了问题。我正在使用的一个网站有一个带有斜杠的相对路径的导航栏,并打算将这些路径视为绝对路径,如下所示:
在页面上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 解释为绝对路径的东西?有什么方法可以消除规范正确且绝对路径是预期的情况?