URI vs URL

Unnormalized

{input: "http://example\t.\norg", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "example\t.\norg" "example.org"
path "" "/"

{input: "http:foo.com", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.org"
path "foo.com" "/foo/foo.com"

{input: "\t :foo.com \n", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:foo.com"

{input: "a:\t foo.com", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "\t foo.com" " foo.com"

{input: "http://f:21/ b ? d # e ", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "/ b " "/%20b%20"
query "? d " "?%20d%20"

{input: "http://f:0/c", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
port "" "0"

{input: "http://f:00000000000000/c", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
port "" "0"

{input: "http://f:00000000000000000000080/c", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
port "80" ""

{input: "http://f:\n/c", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "f\n" "f"

{input: ":foo.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:foo.com/"

{input: ":foo.com\\", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:foo.com/"

{input: ":", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:"

{input: ":a", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:a"

{input: ":/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:/"

{input: ":\\", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:/"

{input: ":#", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:"
fragment "" "#"

{input: "?", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
query "" "?"

{input: ":23", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/:23"

{input: "::", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/::"

{input: "::23", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/::23"

{input: "foo://", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "" "//"

{input: "http::@c:29", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.org"
path ":@c:29" "/foo/:@c:29"

{input: "http://&a:foo(b]c@d:2/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
password "" "foo(b]c"
host "" "d"
port "" "2"
path "" "/"
user "" "&a"

{input: "http://::@c@d:2", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
password ":@c" ":%40c"
path "" "/"

{input: "http://foo.com/\\@", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "/\\@" "//@"

{input: "http:\\\\foo.com\\", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "foo.com"
path "\\\\foo.com\\" "/"

{input: "http:\\\\a\\b:c\\d@foo.com\\", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "a"
path "\\\\a\\b:c\\d@foo.com\\" "/b:c/d@foo.com/"

{input: "foo://///////", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "///////" "/////////"

{input: "foo://///////bar.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "///////bar.com/" "/////////bar.com/"

{input: "foo:////://///", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "//://///" "////://///"

{input: "[61:24:74]:98", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "" "http"
host "" "example.org"
path "" "/foo/[61:24:74]:98"

{input: "http:[61:27]/:foo", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.org"
path "[61:27]/:foo" "/foo/[61:27]/:foo"

{input: "http://[1::2]:3:4", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "http" ""
host "[1::2]:3" ""
port "4" ""

{input: "http://2001::1", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "http" ""
host "2001:" ""
port "1" ""

{input: "http://2001::1]", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "http" ""
host "2001::1]" ""

{input: "http://2001::1]:80", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
scheme "http" ""
host "2001::1]" ""
port "80" ""

{input: "http://[2001::1]", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "" "/"

{input: "http://[2001::1]:80", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
port "80" ""
path "" "/"

{input: "http:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.org"

{input: "ftp:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "https:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "gopher:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "ws:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "wss:/example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "http:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.org"
path "example.com/" "/foo/example.com/"

{input: "ftp:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "https:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "gopher:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "ws:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "wss:example.com/", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "/a/ /c", base: "http://example.org/foo/bar"}

property IETF URI WHATWG URL
path "/a/ /c" "/a/%20/c"

{input: "file:c:\\foo\\bar.html", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "c:\\foo\\bar.html" "/c:/foo/bar.html"

{input: " File:c|////foo\\bar.html", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
scheme "File" "file"
path "c|////foo\\bar.html" "/c:////foo/bar.html"

{input: "C|/foo/bar", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "/tmp/mock/C|/foo/bar" "/C:/foo/bar"

{input: "/C|\\foo\\bar", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "/C|\\foo\\bar" "/C:/foo/bar"

{input: "//C|/foo/bar", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
host "C|" ""
path "/foo/bar" "/C:/foo/bar"

{input: "\\\\server\\file", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
host "" "server"
path "/tmp/mock/\\\\server\\file" "/file"

{input: "/\\server/file", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
host "" "server"
path "/\\server/file" "/file"

{input: "//", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "" "/"

{input: "file://test", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "" "/"

{input: "file://localhost", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "" "/"

{input: "file:test", base: "file:///tmp/mock/path"}

property IETF URI WHATWG URL
path "test" "/tmp/mock/test"

{input: "http://example.com/foo/%2e", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo/%2e" "/foo/"

{input: "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo/%2e./%2e%2e/.%2e/%2e.bar" "/%2e.bar"

{input: "http://example.com/foo%2©zbar", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo%2©zbar" "/foo%2%C3%82%C2%A9zbar"

{input: "http://example.com/foo\t\u0091%91", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo\t\u0091%91" "/foo%C2%91%91"

{input: "http://example.com/foo\tbar", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo\tbar" "/foobar"

{input: "http://example.com\\\\foo\\\\bar", base: "about:blank"}

property IETF URI WHATWG URL
host "example.com\\\\foo\\\\bar" "example.com"
path "" "//foo//bar"

{input: "http://example.com/你好你好", base: "about:blank"}

property IETF URI WHATWG URL
path "/你好你好" "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD"

{input: "http://example.com/‥/foo", base: "about:blank"}

property IETF URI WHATWG URL
path "/‥/foo" "/%E2%80%A5/foo"

{input: "http://example.com//foo", base: "about:blank"}

property IETF URI WHATWG URL
path "//foo" "/%EF%BB%BF/foo"

{input: "http://example.com/‮/foo/‭/bar", base: "about:blank"}

property IETF URI WHATWG URL
path "/‮/foo/‭/bar" "/%E2%80%AE/foo/%E2%80%AD/bar"

{input: "http://www.google.com/foo?bar=baz#", base: "about:blank"}

property IETF URI WHATWG URL
fragment "" "#"

{input: "http://www.google.com/foo?bar=baz# »", base: "about:blank"}

property IETF URI WHATWG URL
fragment "# »" "# %C2%BB"

{input: "http://[www.google.com]/", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
host "[www.google.com]" ""
path "/" ""

{input: "http://www.google.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http://192.0x00A80001", base: "about:blank"}

property IETF URI WHATWG URL
host "192.0x00A80001" "192.0x00a80001"
path "" "/"

{input: "http://www/foo/%2E/html", base: "about:blank"}

property IETF URI WHATWG URL
path "/foo/%2E/html" "/foo/html"

{input: "http://user:pass@/", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
password "pass" ""
path "/" ""
user "user" ""

{input: "http:\\\\www.google.com\\foo", base: "about:blank"}

property IETF URI WHATWG URL
host "" "www.google.com"
path "\\\\www.google.com\\foo" "/foo"

{input: "http://foo:80/", base: "about:blank"}

property IETF URI WHATWG URL
port "80" ""

{input: "httpa://foo:80/", base: "about:blank"}

property IETF URI WHATWG URL
host "foo" ""
port "80" ""
path "/" "//foo:80/"

{input: "https://foo:443/", base: "about:blank"}

property IETF URI WHATWG URL
port "443" ""

{input: "ftp://foo:21/", base: "about:blank"}

property IETF URI WHATWG URL
port "21" ""

{input: "gopher://foo:70/", base: "about:blank"}

property IETF URI WHATWG URL
port "70" ""

{input: "ws://foo:80/", base: "about:blank"}

property IETF URI WHATWG URL
port "80" ""

{input: "wss://foo:443/", base: "about:blank"}

property IETF URI WHATWG URL
port "443" ""

{input: "http:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "ftp:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "https:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "gopher:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "ws:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "wss:/example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "/example.com/" "/"

{input: "http:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "ftp:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "https:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "gopher:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "ws:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "wss:example.com/", base: "about:blank"}

property IETF URI WHATWG URL
host "" "example.com"
path "example.com/" "/"

{input: "http:@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
host "" "www.example.com"
path "@www.example.com" "/"

{input: "http:/@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
host "" "www.example.com"
path "/@www.example.com" "/"

{input: "http://@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http:a:b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
password "" "b"
host "" "www.example.com"
path "a:b@www.example.com" "/"
user "" "a"

{input: "http:/a:b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
password "" "b"
host "" "www.example.com"
path "/a:b@www.example.com" "/"
user "" "a"

{input: "http://a:b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http://@pple.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http::b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
password "" "b"
host "" "www.example.com"
path ":b@www.example.com" "/"

{input: "http:/:b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
password "" "b"
host "" "www.example.com"
path "/:b@www.example.com" "/"

{input: "http://:b@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http:/:@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/:@/www.example.com" ""

{input: "http://user@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/www.example.com" ""
user "user" ""

{input: "http:@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "@/www.example.com" ""

{input: "http:/@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/@/www.example.com" ""

{input: "http://@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/www.example.com" ""

{input: "https:@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "https" ""
path "@/www.example.com" ""

{input: "http:a:b@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "a:b@/www.example.com" ""

{input: "http:/a:b@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/a:b@/www.example.com" ""

{input: "http://a:b@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
password "b" ""
path "/www.example.com" ""
user "a" ""

{input: "http::@/www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path ":@/www.example.com" ""

{input: "http:a:@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
host "" "www.example.com"
path "a:@www.example.com" "/"
user "" "a"

{input: "http:/a:@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
host "" "www.example.com"
path "/a:@www.example.com" "/"
user "" "a"

{input: "http://a:@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http://www.@pple.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "http:@:www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "@:www.example.com" ""

{input: "http:/@:www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
scheme "http" ""
path "/@:www.example.com" ""

{input: "http://:@www.example.com", base: "about:blank"}

property IETF URI WHATWG URL
path "" "/"

{input: "中/test.txt", base: "http://www.example.com/test"}

property IETF URI WHATWG URL
path "/中/test.txt" "/%E4%B8%AD/test.txt"

{input: "http://www.example2.com", base: "http://www.example.com/test"}

property IETF URI WHATWG URL
path "" "/"

{input: "http://ExAmPlE.CoM", base: "http://other.com/"}

property IETF URI WHATWG URL
host "ExAmPlE.CoM" "example.com"
path "" "/"

{input: "http://example example.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "example example.com" ""

{input: "http://Goo%20 goo%7C|.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "Goo%20 goo%7C|.com" ""

{input: "http://GOO  goo.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "GOO  goo.com" ""

{input: "http://GOO​⁠goo.com", base: "http://other.com/"}

property IETF URI WHATWG URL
host "GOO​⁠goo.com" "googoo.com"
path "" "/"

{input: "http://www.foo。bar.com", base: "http://other.com/"}

property IETF URI WHATWG URL
host "www.foo。bar.com" "www.foo.bar.com"
path "" "/"

{input: "http://\uFDD0zyx.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "\uFDD0zyx.com" ""

{input: "http://%ef%b7%90zyx.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%ef%b7%90zyx.com" ""

{input: "http://Go.com", base: "http://other.com/"}

property IETF URI WHATWG URL
host "Go.com" "go.com"
path "" "/"

{input: "http://%41.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%41.com" ""

{input: "http://%ef%bc%85%ef%bc%94%ef%bc%91.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%ef%bc%85%ef%bc%94%ef%bc%91.com" ""

{input: "http://%00.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%00.com" ""

{input: "http://%ef%bc%85%ef%bc%90%ef%bc%90.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%ef%bc%85%ef%bc%90%ef%bc%90.com" ""

{input: "http://你好你好", base: "http://other.com/"}

property IETF URI WHATWG URL
host "你好你好" "xn--6qqa088eba"
path "" "/"

{input: "http://%zz%66%a.com", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%zz%66%a.com" ""

{input: "http://%25", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%25" ""

{input: "http://hello%00", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "hello%00" ""

{input: "http://%30%78%63%30%2e%30%32%35%30.01", base: "http://other.com/"}

property IETF URI WHATWG URL
host "%30%78%63%30%2e%30%32%35%30.01" "127.0.0.1"
path "" "/"

{input: "http://%30%78%63%30%2e%30%32%35%30.01%2e", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%30%78%63%30%2e%30%32%35%30.01%2e" ""

{input: "http://%3g%78%63%30%2e%30%32%35%30%2E.01", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "%3g%78%63%30%2e%30%32%35%30%2E.01" ""

{input: "http://192.168.0.1 hello", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "192.168.0.1 hello" ""

{input: "http://0Xc0.0250.01", base: "http://other.com/"}

property IETF URI WHATWG URL
host "0Xc0.0250.01" "192.168.0.1"
path "" "/"

{input: "http://192.168.0.257", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "192.168.0.257" ""

{input: "http://[google.com]", base: "http://other.com/"}

property IETF URI WHATWG URL
scheme "http" ""
host "[google.com]" ""