commons HTTP Client

とある案件で以下のケースでハマったので調べてみました。


http://hoge.com//hoge.html
このURLにアクセスさせようとしたんですけど、HTTP Clientを使うと「http://hoge.com/hoge.html」となってしまいアクセスできませんでした。

HTTP Clientのソースを調べたら、URIUtilsのnormalizePathメソッドで「//」が「/」になってました。
しかも、このメソッドは必ず通るのでHTTP Clientではアクセスできません。

HttpURLConnectionを使えばアクセスできる事は確認できてますが、RFC的にどうなのか?ってところで、
RFCも調べてみました。

RFC3986の Section 3.3 Path にあるけど、
If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//").
authority component が無い場合は // から始めちゃだめだそうです。
ちなみに authority component は以下の部分。


foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
つまり、http://hoge.com//hote.html っていうのは RFC的にはNGって事でいいんかな。

週明けに、今回の場合みたいなURLを提供しているサービスにお宅のURL間違ってますよって連絡しとこ。