越水です。久々にマシン再起動したらログインできなくて、テンヤワンヤして
ました。

http://www.hoge.funi/foo/bar/ + ../baz/ → http://www.hoge.funi/foo/baz/

HTTPURLのコンストラクタで相対URLの処理をするようになっているのですが、
URIParserのほうでそれを反映していません。また、相対URLの処理にバグがあ
ります。

次のような使い方になるはずです:

URIParser.parse('http://www.hoge.funi/foo/bar/', '../baz/')

で、結果は、'http://www.hoge.funi/foo/baz/'のURLです。

[ :http, "host", 80, "/foo/" ] → http://host:80/foo/   # 合成

これはクライアントが適切にjoinしても、大した手間ではないように思います。

http://host:80/foo/ → [ :http, "host", 80, "/foo/" ]   # 分解

これは、一旦URIオブジェクトを作って、それにアクセスする形になります。

- http://foo:80/http://foo/                         # 正規化(1)
- http://FOO/http://foo/                            # 正規化(2)

正規化そのものを目的としたメソッドを用意するつもりは今のところありませ
んが、比較(uri_a == uri_b)の際には、上の2つは等しく(true)ならなければ
なりません。でも、まだ未対応なんですよね。

- http://foohttp://foo/                             # 正規化(3)

この2つのURLを比較するにはネットワークにアクセスしないといけないので、
ちょっと考えてしまいます。

From: TAKAHASHI Masayoshi <maki / inac.co.jp>
Subject: [ruby-dev:8688] Re: urllib and httplib
Date: Tue, 21 Dec 1999 23:16:48 +0900

> URIParser::create_uri(uristr) の alias でもいいから、
> URI::parse(uristr) みたいなシンプルなのはすごく欲しい、と

了解しました。

問題山積。

越水
greentea / fa2.so-net.ne.jp