Hi,

recently I discovered that java.net.URI.resolve(String str) does not work properly according to RFC 2396 (or 3986) when resolving an empty URI reference ("").

The result from resolving "" against the base URI "http://a/b/c/d;p?q"; should be the same URI ("http://a/b/c/d;p?q";), but is "http://a/b/c/";.



RFC 2396 section 5.2:
   2) If the path component is empty and the scheme, authority, and
      query components are undefined, then it is a reference to the
      current document and we are done.

and Appendix C:
Within an object with a well-defined base URI of

      http://a/b/c/d;p?q

   the relative URI would be resolved as follows:
with C.2
[...]
   An empty reference refers to the start of the current document.

      <>            =  (current document)



RFC 3986 section 5.2.2:
            if (R.path == "") then
               T.path = Base.path;
               if defined(R.query) then
                  T.query = R.query;
               else
                  T.query = Base.query;
               endif;

and section 5.4:
Within a representation with a well defined base URI of

      http://a/b/c/d;p?q

   a relative reference is transformed to its target URI as follows.
with section 5.4.1
[...]

      ""              =  "http://a/b/c/d;p?q";



new URL(URL context, String spec) works better in this case, but it keeps the context URL's fragment identifier if defined, which as I read the RFCs is not correct.

Does this have any relevance in HttpComponents?
--
Johannes Koch
BIKA Web Compliance Center - Fraunhofer FIT
Schloss Birlinghoven, D-53757 Sankt Augustin, Germany
Phone: +49-2241-142628    Fax: +49-2241-142065

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to