Please send feedback to julian.reschke@gmx.de.
RFC 3986: "Uniform Resource Identifier (URI): Generic Syntax" defines not only the URI syntax, but also various operations:
This document collects a set of test cases, and shows how they are parsed into components, and also how they get resolved against a set of test base URIs (to add more tests, please provide feedback!).
The algorithms are (hopefully) faithful implementations of what RFC 3986 defines, using XSLT 2.0. This page is generated from an XML source, uris.xml, transformed by Saxon using uris.xslt.
(source)
http://a/b/c/d;p?q
http://a/b/c/d;p?q resolved against http://a/b/c/d;p?q yields: http://a/b/c/d;p?q
http://a/b/c/d;p?q resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: http://a/b/c/d;p?q
(source)
g:h
g:h resolved against http://a/b/c/d;p?q yields: g:h
g:h resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: g:h
(source)
resolved against http://a/b/c/d;p?q yields: http://a/b/c/d;p?q
resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/plain;charset=iso-8859-7,%be%fg%be
(source)
g
g resolved against http://a/b/c/d;p?q yields: http://a/b/c/g
g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g
(source)
./g
./g resolved against http://a/b/c/d;p?q yields: http://a/b/c/g
./g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g
(source)
g/
g/ resolved against http://a/b/c/d;p?q yields: http://a/b/c/g/
g/ resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g/
(source)
/g
/g resolved against http://a/b/c/d;p?q yields: http://a/g
/g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
//g
//g resolved against http://a/b/c/d;p?q yields: http://g
//g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data://g
(source)
?y
?y resolved against http://a/b/c/d;p?q yields: http://a/b/c/d;p?y
?y resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/plain;charset=iso-8859-7,%be%fg%be?y
(source)
g?y
g?y resolved against http://a/b/c/d;p?q yields: http://a/b/c/g?y
g?y resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g?y
(source)
#s
#s resolved against http://a/b/c/d;p?q yields: http://a/b/c/d;p?q#s
#s resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/plain;charset=iso-8859-7,%be%fg%be#s
(source)
g#s
g#s resolved against http://a/b/c/d;p?q yields: http://a/b/c/g#s
g#s resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g#s
(source)
g?y#s
g?y#s resolved against http://a/b/c/d;p?q yields: http://a/b/c/g?y#s
g?y#s resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g?y#s
(source)
;x
;x resolved against http://a/b/c/d;p?q yields: http://a/b/c/;x
;x resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/;x
(source)
g;x
g;x resolved against http://a/b/c/d;p?q yields: http://a/b/c/g;x
g;x resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g;x
(source)
g;x?y#s
g;x?y#s resolved against http://a/b/c/d;p?q yields: http://a/b/c/g;x?y#s
g;x?y#s resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g;x?y#s
(source)
resolved against http://a/b/c/d;p?q yields: http://a/b/c/d;p?q
resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/plain;charset=iso-8859-7,%be%fg%be
(source)
.
. resolved against http://a/b/c/d;p?q yields: http://a/b/c/
. resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/
(source)
./
./ resolved against http://a/b/c/d;p?q yields: http://a/b/c/
./ resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/
(source)
..
.. resolved against http://a/b/c/d;p?q yields: http://a/b/
.. resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/
(source)
../
../ resolved against http://a/b/c/d;p?q yields: http://a/b/
../ resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/
(source)
../g
../g resolved against http://a/b/c/d;p?q yields: http://a/b/g
../g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
../..
../.. resolved against http://a/b/c/d;p?q yields: http://a/
../.. resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/
(source)
../../
../../ resolved against http://a/b/c/d;p?q yields: http://a/
../../ resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/
(source)
../../g
../../g resolved against http://a/b/c/d;p?q yields: http://a/g
../../g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
../../../g
../../../g resolved against http://a/b/c/d;p?q yields: http://a/g
../../../g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
../../../../g
../../../../g resolved against http://a/b/c/d;p?q yields: http://a/g
../../../../g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
/./g
/./g resolved against http://a/b/c/d;p?q yields: http://a/g
/./g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
/../g
/../g resolved against http://a/b/c/d;p?q yields: http://a/g
/../g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:/g
(source)
g.
g. resolved against http://a/b/c/d;p?q yields: http://a/b/c/g.
g. resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g.
(source)
.g
.g resolved against http://a/b/c/d;p?q yields: http://a/b/c/.g
.g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/.g
(source)
g..
g.. resolved against http://a/b/c/d;p?q yields: http://a/b/c/g..
g.. resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/g..
(source)
..g
..g resolved against http://a/b/c/d;p?q yields: http://a/b/c/..g
..g resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/..g
(source)
data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7
data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7 resolved against http://a/b/c/d;p?q yields: data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7
data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7 resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7
(source)
data:text/plain;charset=iso-8859-7,%be%fg%be
data:text/plain;charset=iso-8859-7,%be%fg%be resolved against http://a/b/c/d;p?q yields: data:text/plain;charset=iso-8859-7,%be%fg%be
data:text/plain;charset=iso-8859-7,%be%fg%be resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: data:text/plain;charset=iso-8859-7,%be%fg%be
(source)
http://www.example.org/Dürst
http://www.example.org/Dürst resolved against http://a/b/c/d;p?q yields: http://www.example.org/Dürst
http://www.example.org/Dürst resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: http://www.example.org/Dürst
http://www.example.org/foo bar/qux<>?\^`{|}
http://www.example.org/foo bar/qux<>?\^`{|} resolved against http://a/b/c/d;p?q yields: http://www.example.org/foo bar/qux<>?\^`{|}
http://www.example.org/foo bar/qux<>?\^`{|} resolved against data:text/plain;charset=iso-8859-7,%be%fg%be yields: http://www.example.org/foo bar/qux<>?\^`{|}
;foo
;foo resolved against http://example.com/b;bar yields: http://example.com/;foo
http://2.example.org#frag2
http://2.example.org#frag2 resolved against http://1.example.org/path1/file1.ext yields: http://2.example.org#frag2
?x
?x resolved against http://example.org/a/b yields: http://example.org/a/b?x
http:test
http:test resolved against http://example.org/foo/bar yields: http:test
Bar.class
Bar.class resolved against jar:http://example.com/jar?x=1!/com/example/Foo.class yields: jar:http://example.com/Bar.class
hello, world
hello, world resolved against http://www.example.com/# yields: http://www.example.com/hello, world
%c2%a9
%c2%a9 resolved against http://www.example.com/# yields: http://www.example.com/%c2%a9
%41%a
%41%a resolved against http://www.example.com/# yields: http://www.example.com/%41%a
asdf#qwer
asdf#qwer resolved against http://www.example.com/# yields: http://www.example.com/asdf#qwer
#asdf
#asdf resolved against http://www.example.com/# yields: http://www.example.com/#asdf
file:c:\\foo\\bar.html
file:c:\\foo\\bar.html resolved against http://www.example.com/foo/bar yields: file:c:\\foo\\bar.html
File:c|////foo\\bar.html
File:c|////foo\\bar.html resolved against http://www.example.com/foo/bar yields: File:c|////foo\\bar.html
file:
file: resolved against http://www.example.com/foo/bar yields: file:
file:UNChost/path
file:UNChost/path resolved against http://www.example.com/foo/bar yields: file:UNChost/path
c:\\foo\\bar
c:\\foo\\bar resolved against http://www.example.com/foo/bar yields: c:\\foo\\bar
C|/foo/bar
C|/foo/bar resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/C|/foo/bar
/C|\\foo\\bar
/C|\\foo\\bar resolved against http://www.example.com/foo/bar yields: http://www.example.com/C|\\foo\\bar
//C|/foo/bar
//C|/foo/bar resolved against http://www.example.com/foo/bar yields: http://C|/foo/bar
//server/file
//server/file resolved against http://www.example.com/foo/bar yields: http://server/file
\\\\server\\file
\\\\server\\file resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/\\\\server\\file
/\\server/file
/\\server/file resolved against http://www.example.com/foo/bar yields: http://www.example.com/\\server/file
file:c:foo/bar.html
file:c:foo/bar.html resolved against http://www.example.com/foo/bar yields: file:c:foo/bar.html
file:/\\/\\C:\\\\//foo\\bar.html
file:/\\/\\C:\\\\//foo\\bar.html resolved against http://www.example.com/foo/bar yields: file:/\\/\\C:\\\\//foo\\bar.html
file:///foo/bar.txt
file:///foo/bar.txt resolved against http://www.example.com/foo/bar yields: file:///foo/bar.txt
FILE:/\\/\\7:\\\\//foo\\bar.html
FILE:/\\/\\7:\\\\//foo\\bar.html resolved against http://www.example.com/foo/bar yields: FILE:/\\/\\7:\\\\//foo\\bar.html
file:filer/home\\me
file:filer/home\\me resolved against http://www.example.com/foo/bar yields: file:filer/home\\me
file:///C:/foo/../../../bar.html
file:///C:/foo/../../../bar.html resolved against http://www.example.com/foo/bar yields: file:///bar.html
file:///C:/asdf#\%c2
file:///C:/asdf#\%c2 resolved against http://www.example.com/foo/bar yields: file:///C:/asdf#\%c2
file:///home/me
file:///home/me resolved against http://www.example.com/foo/bar yields: file:///home/me
file:c:\\foo\\bar.html
file:c:\\foo\\bar.html resolved against http://www.example.com/foo/bar yields: file:c:\\foo\\bar.html
file:c|//foo\\bar.html
file:c|//foo\\bar.html resolved against http://www.example.com/foo/bar yields: file:c|//foo\\bar.html
//
// resolved against http://www.example.com/foo/bar yields: http://
///
/// resolved against http://www.example.com/foo/bar yields: http:///
///test
///test resolved against http://www.example.com/foo/bar yields: http:///test
file://test
file://test resolved against http://www.example.com/foo/bar yields: file://test
file://localhost/
file://localhost/ resolved against http://www.example.com/foo/bar yields: file://localhost/
file://localhost/test
file://localhost/test resolved against http://www.example.com/foo/bar yields: file://localhost/test
file:c:\\foo\\bar.html
file:c:\\foo\\bar.html resolved against file:///tmp/mock/path yields: file:c:\\foo\\bar.html
File:c|////foo\\bar.html
File:c|////foo\\bar.html resolved against file:///tmp/mock/path yields: File:c|////foo\\bar.html
file:
file: resolved against file:///tmp/mock/path yields: file:
file:UNChost/path
file:UNChost/path resolved against file:///tmp/mock/path yields: file:UNChost/path
c:\\foo\\bar
c:\\foo\\bar resolved against file:///tmp/mock/path yields: c:\\foo\\bar
C|/foo/bar
C|/foo/bar resolved against file:///tmp/mock/path yields: file:///tmp/mock/C|/foo/bar
/C|\\foo\\bar
/C|\\foo\\bar resolved against file:///tmp/mock/path yields: file:///C|\\foo\\bar
//C|/foo/bar
//C|/foo/bar resolved against file:///tmp/mock/path yields: file://C|/foo/bar
//server/file
//server/file resolved against file:///tmp/mock/path yields: file://server/file
\\\\server\\file
\\\\server\\file resolved against file:///tmp/mock/path yields: file:///tmp/mock/\\\\server\\file
/\\server/file
/\\server/file resolved against file:///tmp/mock/path yields: file:///\\server/file
file:c:foo/bar.html
file:c:foo/bar.html resolved against file:///tmp/mock/path yields: file:c:foo/bar.html
file:/\\/\\C:\\\\//foo\\bar.html
file:/\\/\\C:\\\\//foo\\bar.html resolved against file:///tmp/mock/path yields: file:/\\/\\C:\\\\//foo\\bar.html
file:///foo/bar.txt
file:///foo/bar.txt resolved against file:///tmp/mock/path yields: file:///foo/bar.txt
FILE:/\\/\\7:\\\\//foo\\bar.html
FILE:/\\/\\7:\\\\//foo\\bar.html resolved against file:///tmp/mock/path yields: FILE:/\\/\\7:\\\\//foo\\bar.html
file:filer/home\\me
file:filer/home\\me resolved against file:///tmp/mock/path yields: file:filer/home\\me
file:///C:/foo/../../../bar.html
file:///C:/foo/../../../bar.html resolved against file:///tmp/mock/path yields: file:///bar.html
file:///C:/asdf#\%c2
file:///C:/asdf#\%c2 resolved against file:///tmp/mock/path yields: file:///C:/asdf#\%c2
file:///home/me
file:///home/me resolved against file:///tmp/mock/path yields: file:///home/me
file:c:\\foo\\bar.html
file:c:\\foo\\bar.html resolved against file:///tmp/mock/path yields: file:c:\\foo\\bar.html
file:c|//foo\\bar.html
file:c|//foo\\bar.html resolved against file:///tmp/mock/path yields: file:c|//foo\\bar.html
//
// resolved against file:///tmp/mock/path yields: file://
///
/// resolved against file:///tmp/mock/path yields: file:///
///test
///test resolved against file:///tmp/mock/path yields: file:///test
file://test
file://test resolved against file:///tmp/mock/path yields: file://test
file://localhost/
file://localhost/ resolved against file:///tmp/mock/path yields: file://localhost/
file://localhost/test
file://localhost/test resolved against file:///tmp/mock/path yields: file://localhost/test
GoOgLe.CoM
GoOgLe.CoM resolved against http:// yields: http:///GoOgLe.CoM
Goo%20 goo%7C|.com
Goo%20 goo%7C|.com resolved against http:// yields: http:///Goo%20 goo%7C|.com
%ef%b7%90zyx.com
%ef%b7%90zyx.com resolved against http:// yields: http:///%ef%b7%90zyx.com
%ef%bc%85%ef%bc%94%ef%bc%91.com
%ef%bc%85%ef%bc%94%ef%bc%91.com resolved against http:// yields: http:///%ef%bc%85%ef%bc%94%ef%bc%91.com
%ef%bc%85%ef%bc%90%ef%bc%90.com
%ef%bc%85%ef%bc%90%ef%bc%90.com resolved against http:// yields: http:///%ef%bc%85%ef%bc%90%ef%bc%90.com
%zz%66%a
%zz%66%a resolved against http:// yields: http:///%zz%66%a
%25
%25 resolved against http:// yields: http:///%25
hello%00
hello%00 resolved against http:// yields: http:///hello%00
%30%78%63%30%2e%30%32%35%30.01
%30%78%63%30%2e%30%32%35%30.01 resolved against http:// yields: http:///%30%78%63%30%2e%30%32%35%30.01
%30%78%63%30%2e%30%32%35%30.01%2e
%30%78%63%30%2e%30%32%35%30.01%2e resolved against http:// yields: http:///%30%78%63%30%2e%30%32%35%30.01%2e
%3g%78%63%30%2e%30%32%35%30%2E.01
%3g%78%63%30%2e%30%32%35%30%2E.01 resolved against http:// yields: http:///%3g%78%63%30%2e%30%32%35%30%2E.01
192.168.0.1 hello
192.168.0.1 hello resolved against http:// yields: http:///192.168.0.1 hello
192.168.0.257
192.168.0.257 resolved against http:// yields: http:///192.168.0.257
[google.com]
[google.com] resolved against http:// yields: http:///[google.com]
go\@ogle.com
go\@ogle.com resolved against http:// yields: http:///go\@ogle.com
go/@ogle.com
go/@ogle.com resolved against http:// yields: http:///go/@ogle.com
www.lookout.net::==80::==443::
www.lookout.net::==80::==443:: resolved against http:// yields: www.lookout.net::==80::==443::
www.lookout.net::80::443
www.lookout.net::80::443 resolved against http:// yields: www.lookout.net::80::443
\
\ resolved against http:// yields: http:///\
\\/
\\/ resolved against http:// yields: http:///\\/
\./
\./ resolved against http:// yields: http:///\./
//:@/
//:@/ resolved against http:// yields: http://:@/
\google.com/foo
\google.com/foo resolved against http:// yields: http:///\google.com/foo
\\google.com/foo
\\google.com/foo resolved against http:// yields: http:///\\google.com/foo
//asdf@/
//asdf@/ resolved against http:// yields: http://asdf@/
//:81
//:81 resolved against http:// yields: http://:81
://
:// resolved against http:// yields: http:///://
c:
c: resolved against http:// yields: c:
xxxx:
xxxx: resolved against http:// yields: xxxx:
.:.
.:. resolved against http:// yields: .:
////@google.com/
////@google.com/ resolved against http:// yields: http:////@google.com/
@google.com
@google.com resolved against http:// yields: http:///@google.com
gOoGle.com
gOoGle.com resolved against http:// yields: http:///gOoGle.com
-foo.bar.com
-foo.bar.com resolved against http:// yields: http:///-foo.bar.com
foo-.bar.com
foo-.bar.com resolved against http:// yields: http:///foo-.bar.com
ab--cd.com
ab--cd.com resolved against http:// yields: http:///ab--cd.com
xn--0.com
xn--0.com resolved against http:// yields: http:///xn--0.com
.
. resolved against http:// yields: http:///
192.168.0.1
192.168.0.1 resolved against http:// yields: http:///192.168.0.1
0300.0250.00.01
0300.0250.00.01 resolved against http:// yields: http:///0300.0250.00.01
0xC0.0Xa8.0x0.0x1
0xC0.0Xa8.0x0.0x1 resolved against http:// yields: http:///0xC0.0Xa8.0x0.0x1
192.168.9.com
192.168.9.com resolved against http:// yields: http:///192.168.9.com
19a.168.0.1
19a.168.0.1 resolved against http:// yields: http:///19a.168.0.1
0308.0250.00.01
0308.0250.00.01 resolved against http:// yields: http:///0308.0250.00.01
0xCG.0xA8.0x0.0x1
0xCG.0xA8.0x0.0x1 resolved against http:// yields: http:///0xCG.0xA8.0x0.0x1
192
192 resolved against http:// yields: http:///192
0xC0a80001
0xC0a80001 resolved against http:// yields: http:///0xC0a80001
030052000001
030052000001 resolved against http:// yields: http:///030052000001
000030052000001
000030052000001 resolved against http:// yields: http:///000030052000001
192.168
192.168 resolved against http:// yields: http:///192.168
192.0x00A80001
192.0x00A80001 resolved against http:// yields: http:///192.0x00A80001
0xc0.052000001
0xc0.052000001 resolved against http:// yields: http:///0xc0.052000001
192.168.1
192.168.1 resolved against http:// yields: http:///192.168.1
192.168.0.0.1
192.168.0.0.1 resolved against http:// yields: http:///192.168.0.0.1
192.168.0.1.
192.168.0.1. resolved against http:// yields: http:///192.168.0.1.
192.168.0.1. hello
192.168.0.1. hello resolved against http:// yields: http:///192.168.0.1. hello
192.168.0.1..
192.168.0.1.. resolved against http:// yields: http:///192.168.0.1..
192.168..1
192.168..1 resolved against http:// yields: http:///192.168..1
0x100.0
0x100.0 resolved against http:// yields: http:///0x100.0
0x100.0.0
0x100.0.0 resolved against http:// yields: http:///0x100.0.0
0x100.0.0.0
0x100.0.0.0 resolved against http:// yields: http:///0x100.0.0.0
0.0x100.0.0
0.0x100.0.0 resolved against http:// yields: http:///0.0x100.0.0
0.0.0x100.0
0.0.0x100.0 resolved against http:// yields: http:///0.0.0x100.0
0.0.0.0x100
0.0.0.0x100 resolved against http:// yields: http:///0.0.0.0x100
0.0.0x10000
0.0.0x10000 resolved against http:// yields: http:///0.0.0x10000
0.0x1000000
0.0x1000000 resolved against http:// yields: http:///0.0x1000000
0x100000000
0x100000000 resolved against http:// yields: http:///0x100000000
0xFF.0
0xFF.0 resolved against http:// yields: http:///0xFF.0
0xFF.0.0
0xFF.0.0 resolved against http:// yields: http:///0xFF.0.0
0xFF.0.0.0
0xFF.0.0.0 resolved against http:// yields: http:///0xFF.0.0.0
0.0xFF.0.0
0.0xFF.0.0 resolved against http:// yields: http:///0.0xFF.0.0
0.0.0xFF.0
0.0.0xFF.0 resolved against http:// yields: http:///0.0.0xFF.0
0.0.0.0xFF
0.0.0.0xFF resolved against http:// yields: http:///0.0.0.0xFF
0.0.0xFFFF
0.0.0xFFFF resolved against http:// yields: http:///0.0.0xFFFF
0.0xFFFFFF
0.0xFFFFFF resolved against http:// yields: http:///0.0xFFFFFF
0xFFFFFFFF
0xFFFFFFFF resolved against http:// yields: http:///0xFFFFFFFF
276.256.0xf1a2.077777
276.256.0xf1a2.077777 resolved against http:// yields: http:///276.256.0xf1a2.077777
192.168.0.257
192.168.0.257 resolved against http:// yields: http:///192.168.0.257
192.168.0xa20001
192.168.0xa20001 resolved against http:// yields: http:///192.168.0xa20001
192.015052000001
192.015052000001 resolved against http:// yields: http:///192.015052000001
0X12C0a80001
0X12C0a80001 resolved against http:// yields: http:///0X12C0a80001
276.1.2
276.1.2 resolved against http:// yields: http:///276.1.2
192.168.0.1 hello
192.168.0.1 hello resolved against http:// yields: http:///192.168.0.1 hello
0000000000000300.0x00000000000000fF.00000000000000001
0000000000000300.0x00000000000000fF.00000000000000001 resolved against http:// yields: http:///0000000000000300.0x00000000000000fF.00000000000000001
0000000000000300.0xffffffffFFFFFFFF.3022415481470977
0000000000000300.0xffffffffFFFFFFFF.3022415481470977 resolved against http:// yields: http:///0000000000000300.0xffffffffFFFFFFFF.3022415481470977
00000000000000000001
00000000000000000001 resolved against http:// yields: http:///00000000000000000001
0000000000000000100000000000000001
0000000000000000100000000000000001 resolved against http:// yields: http:///0000000000000000100000000000000001
0.0.0.000000000000000000z
0.0.0.000000000000000000z resolved against http:// yields: http:///0.0.0.000000000000000000z
0.0.0.100000000000000000z
0.0.0.100000000000000000z resolved against http:// yields: http:///0.0.0.100000000000000000z
0.00.0x.0x0
0.00.0x.0x0 resolved against http:// yields: http:///0.00.0x.0x0
[
[ resolved against http:// yields: http:///[
[:
[: resolved against http:// yields: [:
]
] resolved against http:// yields: http:///]
:]
:] resolved against http:// yields: http:///:]
[]
[] resolved against http:// yields: http:///[]
[:]
[:] resolved against http:// yields: [:]
2001:db8::1
2001:db8::1 resolved against http:// yields: 2001:db8::1
[2001:db8::1
[2001:db8::1 resolved against http:// yields: [2001:db8::1
2001:db8::1]
2001:db8::1] resolved against http:// yields: 2001:db8::1]
[::]
[::] resolved against http:// yields: [::]
[::1]
[::1] resolved against http:// yields: [::1]
[1::]
[1::] resolved against http:// yields: [1::]
[::192.168.0.1]
[::192.168.0.1] resolved against http:// yields: [::192.168.0.1]
[::ffff:192.168.0.1]
[::ffff:192.168.0.1] resolved against http:// yields: [::ffff:192.168.0.1]
[000:01:02:003:004:5:6:007]
[000:01:02:003:004:5:6:007] resolved against http:// yields: [000:01:02:003:004:5:6:007]
[A:b:c:DE:fF:0:1:aC]
[A:b:c:DE:fF:0:1:aC] resolved against http:// yields: [A:b:c:DE:fF:0:1:aC]
[1:0:0:2::3:0]
[1:0:0:2::3:0] resolved against http:// yields: [1:0:0:2::3:0]
[1::2:0:0:3:0]
[1::2:0:0:3:0] resolved against http:// yields: [1::2:0:0:3:0]
[::eeee:192.168.0.1]
[::eeee:192.168.0.1] resolved against http:// yields: [::eeee:192.168.0.1]
[2001::192.168.0.1]
[2001::192.168.0.1] resolved against http:// yields: [2001::192.168.0.1]
[1:2:192.168.0.1:5:6]
[1:2:192.168.0.1:5:6] resolved against http:// yields: [1:2:192.168.0.1:5:6]
[::ffff:192.1.2]
[::ffff:192.1.2] resolved against http:// yields: [::ffff:192.1.2]
[::ffff:0xC0.0Xa8.0x0.0x1]
[::ffff:0xC0.0Xa8.0x0.0x1] resolved against http:// yields: [::ffff:0xC0.0Xa8.0x0.0x1]
[0:0::0:0:8]
[0:0::0:0:8] resolved against http:// yields: [0:0::0:0:8]
[2001:db8::1]
[2001:db8::1] resolved against http:// yields: [2001:db8::1]
[2001::db8::1]
[2001::db8::1] resolved against http:// yields: [2001::db8::1]
[2001:db8:::1]
[2001:db8:::1] resolved against http:// yields: [2001:db8:::1]
[:::]
[:::] resolved against http:// yields: [:::]
[2001::.com]
[2001::.com] resolved against http:// yields: [2001::.com]
[::192.168.0.0.1]
[::192.168.0.0.1] resolved against http:// yields: [::192.168.0.0.1]
[::ffff:192.168.0.0.1]
[::ffff:192.168.0.0.1] resolved against http:// yields: [::ffff:192.168.0.0.1]
[1:2:3:4:5:6:7:8:9]
[1:2:3:4:5:6:7:8:9] resolved against http:// yields: [1:2:3:4:5:6:7:8:9]
[0:0:0:0:0:0:0:192.168.0.1]
[0:0:0:0:0:0:0:192.168.0.1] resolved against http:// yields: [0:0:0:0:0:0:0:192.168.0.1]
[1:2:3:4:5:6::192.168.0.1]
[1:2:3:4:5:6::192.168.0.1] resolved against http:// yields: [1:2:3:4:5:6::192.168.0.1]
[1:2:3:4:5:6::8]
[1:2:3:4:5:6::8] resolved against http:// yields: [1:2:3:4:5:6::8]
[1:2:3:4:5:6:7:8:]
[1:2:3:4:5:6:7:8:] resolved against http:// yields: [1:2:3:4:5:6:7:8:]
[1:2:3:4:5:6:192.168.0.1:]
[1:2:3:4:5:6:192.168.0.1:] resolved against http:// yields: [1:2:3:4:5:6:192.168.0.1:]
[-1:2:3:4:5:6:7:8]
[-1:2:3:4:5:6:7:8] resolved against http:// yields: [-1:2:3:4:5:6:7:8]
[1::%1]
[1::%1] resolved against http:// yields: [1::%1]
[1::%eth0]
[1::%eth0] resolved against http:// yields: [1::%eth0]
[1::%]
[1::%] resolved against http:// yields: [1::%]
[%]
[%] resolved against http:// yields: http:///[%]
[::%:]
[::%:] resolved against http:// yields: [::%:]
[:0:0::0:0:8]
[:0:0::0:0:8] resolved against http:// yields: [:0:0::0:0:8]
[0:0::0:0:8:]
[0:0::0:0:8:] resolved against http:// yields: [0:0::0:0:8:]
[:0:0::0:0:8:]
[:0:0::0:0:8:] resolved against http:// yields: [:0:0::0:0:8:]
[::192.168..1]
[::192.168..1] resolved against http:// yields: [::192.168..1]
[::1 hello]
[::1 hello] resolved against http:// yields: [::1 hello]
addr1
addr1 resolved against mailto: yields: mailto:addr1
addr1@foo.com
addr1@foo.com resolved against mailto: yields: mailto:addr1@foo.com
addr1 \t
addr1 \t resolved against mailto: yields: mailto:addr1 \t
addr1?to=jon
addr1?to=jon resolved against mailto: yields: mailto:addr1?to=jon
addr1,addr2
addr1,addr2 resolved against mailto: yields: mailto:addr1,addr2
addr1, addr2
addr1, addr2 resolved against mailto: yields: mailto:addr1, addr2
addr1%2caddr2
addr1%2caddr2 resolved against mailto: yields: mailto:addr1%2caddr2
addr1?
addr1? resolved against mailto: yields: mailto:addr1?
/././foo
/././foo resolved against http://www.example.com yields: http://www.example.com/foo
/./.foo
/./.foo resolved against http://www.example.com yields: http://www.example.com/.foo
/foo/.
/foo/. resolved against http://www.example.com yields: http://www.example.com/foo/
/foo/./
/foo/./ resolved against http://www.example.com yields: http://www.example.com/foo/
/foo/bar/..
/foo/bar/.. resolved against http://www.example.com yields: http://www.example.com/foo/
/foo/bar/../
/foo/bar/../ resolved against http://www.example.com yields: http://www.example.com/foo/
/foo/..bar
/foo/..bar resolved against http://www.example.com yields: http://www.example.com/foo/..bar
/foo/bar/../ton
/foo/bar/../ton resolved against http://www.example.com yields: http://www.example.com/foo/ton
/foo/bar/../ton/../../a
/foo/bar/../ton/../../a resolved against http://www.example.com yields: http://www.example.com/a
/foo/../../..
/foo/../../.. resolved against http://www.example.com yields: http://www.example.com/
/foo/../../../ton
/foo/../../../ton resolved against http://www.example.com yields: http://www.example.com/ton
/foo/%2e
/foo/%2e resolved against http://www.example.com yields: http://www.example.com/foo/%2e
/foo/%2e%2
/foo/%2e%2 resolved against http://www.example.com yields: http://www.example.com/foo/%2e%2
/foo/%2e./%2e%2e/.%2e/%2e.bar
/foo/%2e./%2e%2e/.%2e/%2e.bar resolved against http://www.example.com yields: http://www.example.com/foo/%2e./%2e%2e/.%2e/%2e.bar
////../..
////../.. resolved against http://www.example.com yields: http:///
/foo/bar//../..
/foo/bar//../.. resolved against http://www.example.com yields: http://www.example.com/foo/
/foo/bar//..
/foo/bar//.. resolved against http://www.example.com yields: http://www.example.com/foo/bar/
/foo/bar/..
/foo/bar/.. resolved against http://www.example.com yields: http://www.example.com/foo/
/foo
/foo resolved against http://www.example.com yields: http://www.example.com/foo
/%20foo
/%20foo resolved against http://www.example.com yields: http://www.example.com/%20foo
/foo%
/foo% resolved against http://www.example.com yields: http://www.example.com/foo%
/foo%2
/foo%2 resolved against http://www.example.com yields: http://www.example.com/foo%2
/foo%2zbar
/foo%2zbar resolved against http://www.example.com yields: http://www.example.com/foo%2zbar
/foo%41%7a
/foo%41%7a resolved against http://www.example.com yields: http://www.example.com/foo%41%7a
/foo%00%51
/foo%00%51 resolved against http://www.example.com yields: http://www.example.com/foo%00%51
/(%28:%3A%29)
/(%28:%3A%29) resolved against http://www.example.com yields: http://www.example.com/(%28:%3A%29)
/%3A%3a%3C%3c
/%3A%3a%3C%3c resolved against http://www.example.com yields: http://www.example.com/%3A%3a%3C%3c
/foo\tbar
/foo\tbar resolved against http://www.example.com yields: http://www.example.com/foo\tbar
\\foo\\bar
\\foo\\bar resolved against http://www.example.com yields: http://www.example.com/\\foo\\bar
/%7Ffp3%3Eju%3Dduvgw%3Dd
/%7Ffp3%3Eju%3Dduvgw%3Dd resolved against http://www.example.com yields: http://www.example.com/%7Ffp3%3Eju%3Dduvgw%3Dd
/@asdf%40
/@asdf%40 resolved against http://www.example.com yields: http://www.example.com/@asdf%40
as df
as df resolved against http://www.example.com: yields: http://www.example.com:/as df
-2
-2 resolved against http://www.example.com: yields: http://www.example.com:/-2
80
80 resolved against http://www.example.com: yields: http://www.example.com:/80
8080
8080 resolved against http://www.example.com: yields: http://www.example.com:/8080
resolved against http://www.example.com: yields: http://www.example.com:
foo=bar
foo=bar resolved against http://www.example.com/? yields: http://www.example.com/foo=bar
as?df
as?df resolved against http://www.example.com/? yields: http://www.example.com/as?df
\%02hello%7f bye
\%02hello%7f bye resolved against http://www.example.com/? yields: http://www.example.com/\%02hello%7f bye
%40%41123
%40%41123 resolved against http://www.example.com/? yields: http://www.example.com/%40%41123
q=<asdf>
q=<asdf> resolved against http://www.example.com/? yields: http://www.example.com/q=<asdf>
q=\"asdf\"
q=\"asdf\" resolved against http://www.example.com/? yields: http://www.example.com/q=\"asdf\"
\\\\Another\\path
\\\\Another\\path resolved against http://host/a yields: http://host/\\\\Another\\path
/c:\\foo
/c:\\foo resolved against http://host/a yields: http://host/c:\\foo
//c:\\foo
//c:\\foo resolved against http://host/a yields: http://c:\\foo
http://host/
http://host/ resolved against file:///C:/foo yields: http://host/
bar
bar resolved against file:///C:/foo yields: file:///C:/bar
../../../bar.html
../../../bar.html resolved against file:///C:/foo yields: file:///bar.html
/../bar.html
/../bar.html resolved against file:///C:/foo yields: file:///bar.html
\\\\another\\path
\\\\another\\path resolved against http://host/a yields: http://host/\\\\another\\path
//c:/foo
//c:/foo resolved against file:///C:/something yields: file://c:/foo
//localhost/c:/foo
//localhost/c:/foo resolved against file:///C:/something yields: file://localhost/c:/foo
c:
c: resolved against file:///C:/foo yields: c:
c:/foo
c:/foo resolved against file:///C:/foo yields: c:/foo
c:\\foo
c:\\foo resolved against http://host/a yields: c:\\foo
/z:/bar
/z:/bar resolved against file:///C:/foo yields: file:///z:/bar
/bar
/bar resolved against file:///C:/foo yields: file:///bar
/bar
/bar resolved against file://localhost/C:/foo yields: file://localhost/bar
/bar
/bar resolved against file:///C:/foo/com/ yields: file:///bar
//somehost/path
//somehost/path resolved against file:///C:/something yields: file://somehost/path
/\\//somehost/path
/\\//somehost/path resolved against file:///C:/something yields: file:///\\//somehost/path
http://another/
http://another/ resolved against http://host/a yields: http://another/
http:////another/
http:////another/ resolved against http://host/a yields: http:////another/
resolved against http://foo/bar yields: http://foo/bar
resolved against http://foo/bar#ref yields: http://foo/bar
resolved against http://foo/bar# yields: http://foo/bar
another
another resolved against http://foo/bar yields: http://foo/ another
.
. resolved against http://foo/bar yields: http://foo/ .
\t
\t resolved against http://foo/bar yields: http://foo/ \t
http:path
http:path resolved against http://host/a yields: http:path
http:path
http:path resolved against http://host/a/ yields: http:path
http:/path
http:/path resolved against http://host/a yields: http:/path
HTTP:/path
HTTP:/path resolved against http://host/a yields: HTTP:/path
https:host2
https:host2 resolved against http://host/a yields: https:host2
htto:/host2
htto:/host2 resolved against http://host/a yields: htto:/host2
/b/c/d
/b/c/d resolved against http://host/a yields: http://host/b/c/d
\\b\\c\\d
\\b\\c\\d resolved against http://host/a yields: http://host/\\b\\c\\d
/b/../c
/b/../c resolved against http://host/a yields: http://host/c
/b/../c
/b/../c resolved against http://host/a?b#c yields: http://host/c
\\b/../c?x#y
\\b/../c?x#y resolved against http://host/a yields: http://host/c?x#y
/b/../c?x#y
/b/../c?x#y resolved against http://host/a?b#c yields: http://host/c?x#y
b
b resolved against http://host/a yields: http://host/b
bc/de
bc/de resolved against http://host/a yields: http://host/bc/de
bc/de?query#ref
bc/de?query#ref resolved against http://host/a/ yields: http://host/a/bc/de?query#ref
.
. resolved against http://host/a/ yields: http://host/a/
..
.. resolved against http://host/a/ yields: http://host/
./..
./.. resolved against http://host/a/ yields: http://host/
../.
../. resolved against http://host/a/ yields: http://host/
././.
././. resolved against http://host/a/ yields: http://host/a/
../../../foo
../../../foo resolved against http://host/a?query#ref yields: http://host/foo
?foo=bar
?foo=bar resolved against http://host/a yields: http://host/a?foo=bar
?
? resolved against http://host/a?x=y#z yields: http://host/a?
?foo=bar#com
?foo=bar#com resolved against http://host/a?x=y#z yields: http://host/a?foo=bar#com
#ref
#ref resolved against http://host/a yields: http://host/a#ref
#
# resolved against http://host/a#b yields: http://host/a#
#bye
#bye resolved against http://host/a?foo=bar#hello yields: http://host/a?foo=bar#bye
baz.html
baz.html resolved against data:foobar yields: data:baz.html
data:baz
data:baz resolved against data:foobar yields: data:baz
data:/base
data:/base resolved against data:foobar yields: data:/base
http://host/
http://host/ resolved against data:foobar yields: http://host/
http:host
http:host resolved against data:foobar yields: http:host
./asd:fgh
./asd:fgh resolved against http://foo/bar yields: http://foo/asd:fgh
:foo
:foo resolved against http://foo/bar yields: http://foo/:foo
hello world
hello world resolved against http://foo/bar yields: http://foo/ hello world
:foo
:foo resolved against data:asdf yields: data::foo
;foo
;foo resolved against http://host/a yields: http://host/;foo
;foo
;foo resolved against http://host/a; yields: http://host/;foo
;/../bar
;/../bar resolved against http://host/a yields: http://host/bar
//another
//another resolved against http://host/a yields: http://another
//another/path?query#ref
//another/path?query#ref resolved against http://host/a yields: http://another/path?query#ref
///another/path
///another/path resolved against http://host/a yields: http:///another/path
//Another\\path
//Another\\path resolved against http://host/a yields: http://Another\\path
//
// resolved against http://host/a yields: http://
\\/another/path
\\/another/path resolved against http://host/a yields: http://host/\\/another/path
/\\Another\\path
/\\Another\\path resolved against http://host/a yields: http://host/\\Another\\path
http://user:pass@foo:21/bar;par?b#c
http://user:pass@foo:21/bar;par?b#c resolved against data:text/plain,baseURL yields: http://user:pass@foo:21/bar;par?b#c
http:foo.com
http:foo.com resolved against data:text/plain,baseURL yields: http:foo.com
foo.com
foo.com resolved against data:text/plain,baseURL yields: data:text/ foo.com
http://f:21/ b ? d # e
http://f:21/ b ? d # e resolved against data:text/plain,baseURL yields: http://f:21/ b ? d # e
http://f:/c
http://f:/c resolved against data:text/plain,baseURL yields: http://f:/c
http://f:0/c
http://f:0/c resolved against data:text/plain,baseURL yields: http://f:0/c
http://f:00000000000000/c
http://f:00000000000000/c resolved against data:text/plain,baseURL yields: http://f:00000000000000/c
http://f:00000000000000000000080/c
http://f:00000000000000000000080/c resolved against data:text/plain,baseURL yields: http://f:00000000000000000000080/c
http://f:b/c
http://f:b/c resolved against data:text/plain,baseURL yields: http://f:b/c
http://f: /c
http://f: /c resolved against data:text/plain,baseURL yields: http://f: /c
http://f:fifty-two/c
http://f:fifty-two/c resolved against data:text/plain,baseURL yields: http://f:fifty-two/c
http://f:999999/c
http://f:999999/c resolved against data:text/plain,baseURL yields: http://f:999999/c
http://f: 21 / b ? d # e
http://f: 21 / b ? d # e resolved against data:text/plain,baseURL yields: http://f: 21 / b ? d # e
resolved against data:text/plain,baseURL yields: data:text/plain,baseURL
:foo.com/
:foo.com/ resolved against data:text/plain,baseURL yields: data:text/:foo.com/
:foo.com\\
:foo.com\\ resolved against data:text/plain,baseURL yields: data:text/:foo.com\\
:
: resolved against data:text/plain,baseURL yields: data:text/:
:a
:a resolved against data:text/plain,baseURL yields: data:text/:a
:/
:/ resolved against data:text/plain,baseURL yields: data:text/:/
:\\
:\\ resolved against data:text/plain,baseURL yields: data:text/:\\
:#
:# resolved against data:text/plain,baseURL yields: data:text/:#
#
# resolved against data:text/plain,baseURL yields: data:text/plain,baseURL#
#/
#/ resolved against data:text/plain,baseURL yields: data:text/plain,baseURL#/
#\\
#\\ resolved against data:text/plain,baseURL yields: data:text/plain,baseURL#\\
#;?
#;? resolved against data:text/plain,baseURL yields: data:text/plain,baseURL#;?
?
? resolved against data:text/plain,baseURL yields: data:text/plain,baseURL?
/
/ resolved against data:text/plain,baseURL yields: data:/
:23
:23 resolved against data:text/plain,baseURL yields: data:text/:23
/:23
/:23 resolved against data:text/plain,baseURL yields: data:/:23
//
// resolved against data:text/plain,baseURL yields: data://
::
:: resolved against data:text/plain,baseURL yields: data:text/::
::23
::23 resolved against data:text/plain,baseURL yields: data:text/::23
foo://
foo:// resolved against data:text/plain,baseURL yields: foo://
http://a:b@c:29/d
http://a:b@c:29/d resolved against data:text/plain,baseURL yields: http://a:b@c:29/d
http::@c:29
http::@c:29 resolved against data:text/plain,baseURL yields: http::@c:29
http://&a:foo(b]c@d:2/
http://&a:foo(b]c@d:2/ resolved against data:text/plain,baseURL yields: http://&a:foo(b]c@d:2/
http://::@c@d:2
http://::@c@d:2 resolved against data:text/plain,baseURL yields: http://::@c@d:2
http://foo.com:b@d/
http://foo.com:b@d/ resolved against data:text/plain,baseURL yields: http://foo.com:b@d/
http://foo.com/\\@
http://foo.com/\\@ resolved against data:text/plain,baseURL yields: http://foo.com/\\@
http:\\\\foo.com\\
http:\\\\foo.com\\ resolved against data:text/plain,baseURL yields: http:\\\\foo.com\\
http:\\\\a\\b:c\\d@foo.com\\
http:\\\\a\\b:c\\d@foo.com\\ resolved against data:text/plain,baseURL yields: http:\\\\a\\b:c\\d@foo.com\\
foo:/
foo:/ resolved against data:text/plain,baseURL yields: foo:/
foo:/bar.com/
foo:/bar.com/ resolved against data:text/plain,baseURL yields: foo:/bar.com/
foo://///////
foo:///////// resolved against data:text/plain,baseURL yields: foo://///////
foo://///////bar.com/
foo://///////bar.com/ resolved against data:text/plain,baseURL yields: foo://///////bar.com/
foo:////://///
foo:////:///// resolved against data:text/plain,baseURL yields: foo:////://///
c:/foo
c:/foo resolved against data:text/plain,baseURL yields: c:/foo
//foo/bar
//foo/bar resolved against data:text/plain,baseURL yields: data://foo/bar
http://foo/path;a??e#f#g
http://foo/path;a??e#f#g resolved against data:text/plain,baseURL yields: http://foo/path;a??e#f#g
http://foo/abcd?efgh?ijkl
http://foo/abcd?efgh?ijkl resolved against data:text/plain,baseURL yields: http://foo/abcd?efgh?ijkl
http://foo/abcd#foo?bar
http://foo/abcd#foo?bar resolved against data:text/plain,baseURL yields: http://foo/abcd#foo?bar
[61:24:74]:98
[61:24:74]:98 resolved against data:text/plain,baseURL yields: [61:24:74]:98
http://[61:27]:98
http://[61:27]:98 resolved against data:text/plain,baseURL yields: http://[61:27]:98
http:[61:27]/:foo
http:[61:27]/:foo resolved against data:text/plain,baseURL yields: http:[61:27]/:foo
http://[1::2]:3:4
http://[1::2]:3:4 resolved against data:text/plain,baseURL yields: http://[1::2]:3:4
http://2001::1
http://2001::1 resolved against data:text/plain,baseURL yields: http://2001::1
http://[2001::1
http://[2001::1 resolved against data:text/plain,baseURL yields: http://[2001::1
http://2001::1]
http://2001::1] resolved against data:text/plain,baseURL yields: http://2001::1]
http://2001::1]:80
http://2001::1]:80 resolved against data:text/plain,baseURL yields: http://2001::1]:80
http://[2001::1]
http://[2001::1] resolved against data:text/plain,baseURL yields: http://[2001::1]
http://[2001::1]:80
http://[2001::1]:80 resolved against data:text/plain,baseURL yields: http://[2001::1]:80
http://[[::]]
http://[[::]] resolved against data:text/plain,baseURL yields: http://[[::]]
http://user:pass@foo:21/bar;par?b#c
http://user:pass@foo:21/bar;par?b#c resolved against http://www.example.com/foo/bar yields: http://user:pass@foo:21/bar;par?b#c
http:foo.com
http:foo.com resolved against http://www.example.com/foo/bar yields: http:foo.com
foo.com
foo.com resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/ foo.com
http://f:21/ b ? d # e
http://f:21/ b ? d # e resolved against http://www.example.com/foo/bar yields: http://f:21/ b ? d # e
http://f:/c
http://f:/c resolved against http://www.example.com/foo/bar yields: http://f:/c
http://f:0/c
http://f:0/c resolved against http://www.example.com/foo/bar yields: http://f:0/c
http://f:00000000000000/c
http://f:00000000000000/c resolved against http://www.example.com/foo/bar yields: http://f:00000000000000/c
http://f:00000000000000000000080/c
http://f:00000000000000000000080/c resolved against http://www.example.com/foo/bar yields: http://f:00000000000000000000080/c
http://f:b/c
http://f:b/c resolved against http://www.example.com/foo/bar yields: http://f:b/c
http://f: /c
http://f: /c resolved against http://www.example.com/foo/bar yields: http://f: /c
http://f:fifty-two/c
http://f:fifty-two/c resolved against http://www.example.com/foo/bar yields: http://f:fifty-two/c
http://f:999999/c
http://f:999999/c resolved against http://www.example.com/foo/bar yields: http://f:999999/c
http://f: 21 / b ? d # e
http://f: 21 / b ? d # e resolved against http://www.example.com/foo/bar yields: http://f: 21 / b ? d # e
resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar
:foo.com/
:foo.com/ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:foo.com/
:foo.com\\
:foo.com\\ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:foo.com\\
:
: resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:
:a
:a resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:a
:/
:/ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:/
:\\
:\\ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:\\
:#
:# resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:#
#
# resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar#
#/
#/ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar#/
#\\
#\\ resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar#\\
#;?
#;? resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar#;?
?
? resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/bar?
/
/ resolved against http://www.example.com/foo/bar yields: http://www.example.com/
:23
:23 resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/:23
/:23
/:23 resolved against http://www.example.com/foo/bar yields: http://www.example.com/:23
//
// resolved against http://www.example.com/foo/bar yields: http://
::
:: resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/::
::23
::23 resolved against http://www.example.com/foo/bar yields: http://www.example.com/foo/::23
foo://
foo:// resolved against http://www.example.com/foo/bar yields: foo://
http://a:b@c:29/d
http://a:b@c:29/d resolved against http://www.example.com/foo/bar yields: http://a:b@c:29/d
http::@c:29
http::@c:29 resolved against http://www.example.com/foo/bar yields: http::@c:29
http://&a:foo(b]c@d:2/
http://&a:foo(b]c@d:2/ resolved against http://www.example.com/foo/bar yields: http://&a:foo(b]c@d:2/
http://::@c@d:2
http://::@c@d:2 resolved against http://www.example.com/foo/bar yields: http://::@c@d:2
http://foo.com:b@d/
http://foo.com:b@d/ resolved against http://www.example.com/foo/bar yields: http://foo.com:b@d/
http://foo.com/\\@
http://foo.com/\\@ resolved against http://www.example.com/foo/bar yields: http://foo.com/\\@
http:\\\\foo.com\\
http:\\\\foo.com\\ resolved against http://www.example.com/foo/bar yields: http:\\\\foo.com\\
http:\\\\a\\b:c\\d@foo.com\\
http:\\\\a\\b:c\\d@foo.com\\ resolved against http://www.example.com/foo/bar yields: http:\\\\a\\b:c\\d@foo.com\\
foo:/
foo:/ resolved against http://www.example.com/foo/bar yields: foo:/
foo:/bar.com/
foo:/bar.com/ resolved against http://www.example.com/foo/bar yields: foo:/bar.com/
foo://///////
foo:///////// resolved against http://www.example.com/foo/bar yields: foo://///////
foo://///////bar.com/
foo://///////bar.com/ resolved against http://www.example.com/foo/bar yields: foo://///////bar.com/
foo:////://///
foo:////:///// resolved against http://www.example.com/foo/bar yields: foo:////://///
c:/foo
c:/foo resolved against http://www.example.com/foo/bar yields: c:/foo
//foo/bar
//foo/bar resolved against http://www.example.com/foo/bar yields: http://foo/bar
http://foo/path;a??e#f#g
http://foo/path;a??e#f#g resolved against http://www.example.com/foo/bar yields: http://foo/path;a??e#f#g
http://foo/abcd?efgh?ijkl
http://foo/abcd?efgh?ijkl resolved against http://www.example.com/foo/bar yields: http://foo/abcd?efgh?ijkl
http://foo/abcd#foo?bar
http://foo/abcd#foo?bar resolved against http://www.example.com/foo/bar yields: http://foo/abcd#foo?bar
[61:24:74]:98
[61:24:74]:98 resolved against http://www.example.com/foo/bar yields: [61:24:74]:98
http://[61:27]:98
http://[61:27]:98 resolved against http://www.example.com/foo/bar yields: http://[61:27]:98
http:[61:27]/:foo
http:[61:27]/:foo resolved against http://www.example.com/foo/bar yields: http:[61:27]/:foo
http://[1::2]:3:4
http://[1::2]:3:4 resolved against http://www.example.com/foo/bar yields: http://[1::2]:3:4
http://2001::1
http://2001::1 resolved against http://www.example.com/foo/bar yields: http://2001::1
http://[2001::1
http://[2001::1 resolved against http://www.example.com/foo/bar yields: http://[2001::1
http://2001::1]
http://2001::1] resolved against http://www.example.com/foo/bar yields: http://2001::1]
http://2001::1]:80
http://2001::1]:80 resolved against http://www.example.com/foo/bar yields: http://2001::1]:80
http://[2001::1]
http://[2001::1] resolved against http://www.example.com/foo/bar yields: http://[2001::1]
http://[2001::1]:80
http://[2001::1]:80 resolved against http://www.example.com/foo/bar yields: http://[2001::1]:80
http://[[::]]
http://[[::]] resolved against http://www.example.com/foo/bar yields: http://[[::]]
http://example.com/
http://example.com/ resolved against http://example.org/foo/bar yields: http://example.com/
http://example.com/
http://example.com/ resolved against http://example.org/foo/bar yields: http://example.com/
/
/ resolved against http://example.org/foo/bar yields: http://example.org/
?value= foo bar
?value= foo bar resolved against http://iris.test.ing/ yields: http://iris.test.ing/?value= foo bar
example.com
example.com resolved against http://user%40 yields: http://user%40/example.com
example.com
example.com resolved against http://user%3Ainfo%40 yields: http://user%3Ainfo%40/example.com
example.com
example.com resolved against http://user@ yields: http://user@/example.com
example.com
example.com resolved against http://user:info@ yields: http://user:info@/example.com