commons HTTP Client
とある案件で以下のケースでハマったので調べてみました。
このURLにアクセスさせようとしたんですけど、HTTP Clientを使うと「http://hoge.com/hoge.html」となってしまいアクセスできませんでした。
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 は以下の部分。
つまり、http://hoge.com//hote.html っていうのは RFC的にはNGって事でいいんかな。
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
週明けに、今回の場合みたいなURLを提供しているサービスにお宅のURL間違ってますよって連絡しとこ。