Ruby:URI连接行为

3

我正在开发一个HTML解析器,遇到了一个网站在URL编码方面存在问题。在主页(“http://example.com/a/b”)上,我有一些链接以“a/b”开头,但缺少初始的“/”。根据我对相对路径的理解,Ruby URI可以正确地工作:

uri = URI("http://example.com/a/b")
(uri + "a/b").to_s
==> http://example.com/a/a/b

然而,在Firefox或Chrome等浏览器中,行为似乎有所不同,因为页面被重定向到http://example.com/a/b(顺便说一句,该链接有效)。
您是否见过这种情况,并且您会建议在Ruby中拥有与Web浏览器相同的行为吗?
1个回答

1

我认为uri + 'a/b'只是简单地进行字符串连接。

我的建议是尝试这样做:

File.join('http://www.example.com', 'a/b')

File.join支持这种操作 :)


URI中的“+”不仅仅是字符串连接,它还将一个URI与另一个绝对或相对URI连接起来,考虑到初始URI。我认为它做得很好,但我不理解我的浏览器行为。 - user1694048
啊,好的,我不知道那个... 至于浏览器行为...很奇怪但没错。没有以 / 为前缀的东西是相对于当前 URL 的。因此,如果您在 example.com/a 上,链接到 a/b 将得到 example.com/a/a/b。 - Tigraine
没错,我认为浏览器会有某种回退模式来处理编码不正确的网站。 - user1694048

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接