This url parser reads one absolute URL with the browser’s WHATWG implementation, new URL(), and lists the fields that object exposes. You get href, protocol, origin, hostname, port, pathname, search, and hash. A username is shown only when one is present. Query parameters are separate rows, and each value is written as text.
The constructor is called with the string you typed and with no base URL. A missing scheme is therefore an error. The page also checks for a scheme before it constructs the URL, and the message says the parser will not guess one. example.com/docs is not rewritten as https://example.com/docs. A scheme-relative string that starts with two slashes is also refused, because it would otherwise inherit the page you are on.
Parsing does not fetch the address. There is no fetch, no XHR, no beacon, and no DNS lookup from this tool. A javascript: URL, if you paste one, is only an object with a protocol and a path. The page does not navigate to it. Markup inside a query value is assigned with text content, not as HTML, so a value that looks like a script tag stays a string in the table.
The input limit is 8,000 characters, which is enough for a long query and short enough that a pasted document is obviously the wrong tool. Empty input is an error. A password in userinfo is not printed. The username is, because it is not the secret half of that pair, and because the field list for this page includes it when present.
Default ports are shown as (default) because the URL object leaves the port property empty for them. A non-default port such as 8443 is shown as digits. The hash includes the leading # when one exists. The search string includes the leading ?.
Parsing https://ada@example.com:8443/docs/a?q=1&q=2#top shows protocol https:, origin https://example.com:8443, username ada, hostname example.com, port 8443, pathname /docs/a, the search string, two query rows for q, and hash #top. The same host on port 443 for https is reported as the default port.
https://example.com/docs?q=cat#h
A string with no scheme, or a string the URL constructor rejects, produces a parse error and clears any previous rows. If you needed the query value percent-encoded before you built the address, use the URL Encoder / Decoder on that component first, then come back and parse the finished URL.
The URL object will normalize some spellings. It may add a trailing slash on an empty path, or encode characters that were raw in the input. The href row is that normalized form. The page does not promise that href is byte-for-byte the string you pasted. If you need the raw paste, it remains in the input until you clear it.
Internationalized domain names are shown in the form the browser’s URL object uses. This page does not add a second IDNA library. If the hostname looks like punycode, that is the implementation you already have, not a lookup against a registry.
Duplicate query keys stay as separate rows, in order. A key with an empty value is still a row. The name and the value are not passed through an HTML parser, so entities in the raw URL are whatever the URL parser decoded, and they are still text in the cell.
Use this page to see the parts. Use the encoder when you are still building a component. Neither page stores the address, and neither page opens it.
Parses with new URL() and does not supply a base, so a missing scheme is an error. Nothing is fetched. A password in the URL is not printed. Limit: 8,000 characters.
No. new URL() only parses text. The page does not call fetch, XHR, or any lookup.
The parser stops. It does not assume https, http, or the site you are browsing.
No. Names and values are written as text. Markup in a value is not turned into a page element.
If a URL contains user:password@host, the username is shown and the password is not printed.