ToolDeck

URL Parser

Rozdělte URL na komponenty — protokol, host, cesta, parametry dotazu, hash

Zkusit příklad

Co je parsování URL?

Parsování URL je proces rozdělení Uniform Resource Locatoru na jeho jednotlivé komponenty: protokol (schéma), hostname, port, cesta, parametry dotazu a identifikátor fragmentu. Každá URL se řídí strukturou definovanou standardy RFC 3986 a WHATWG URL Standard. Parser URL přečte surový řetězec, identifikuje každý segment podle oddělovačů (://, :, /, ?, #, &, =) a vrátí je jako samostatná, přístupná pole.

Prohlížeče provádějí parsování URL pokaždé, když zadáte adresu nebo kliknete na odkaz. JavaScript konstruktor URL, Python modul urllib.parse a balíček net/url v Go implementují parsery, které se řídí stejnými strukturálními pravidly. Parsování URL je inverzní operací k URL kódování: místo transformace znaků pro bezpečný přenos rozložíte již sestavené URL na části, ze kterých se skládá.

Typická URL jako https://api.example.com:8080/v1/users?page=2&limit=10#section obsahuje šest odlišných komponent. Oddělovací znaky — ://, :, /, ?, &, =, a # — jsou tím, co činí parsování deterministickým: každý z nich signalizuje hranici a umožňuje parseru extrahovat pole bez nejednoznačnosti.

Proč používat online URL parser?

Ruční rozdělování URL pohledem je náchylné k chybám, zejména pokud řetězec obsahuje zakódované znaky, více parametrů dotazu nebo nestandardní porty. Tento nástroj parsuje URL pomocí stejného algoritmu kompatibilního s WHATWG, který používají prohlížeče, a zobrazuje každou komponentu v přehledné tabulce s možností kopírování.

Okamžité parsování v prohlížeči
Vložte libovolnou URL a okamžitě uvidíte všechny komponenty rozložené. Žádné načítání stránky, žádné volání serveru, žádné čekání.
🔒
Zachování soukromí URL
Parsování probíhá výhradně ve vašem prohlížeči pomocí nativního URL API. URL, kterou zadáte, nikdy neopustí vaše zařízení.
🔍
Kontrola každého detailu
Zobrazí protokol, hostname, port, cestu, řetězec dotazu, hash a každý jednotlivý parametr dotazu s jeho dekódovanou hodnotou.
📋
Kopírování jednotlivých komponent
Klikněte na tlačítko kopírování vedle libovolného pole a zkopírujte přesnou hodnotu. Není potřeba ručně označovat a ořezávat podřetězce.

Případy použití URL parseru

Ladění frontendu a routování
Ověřte, zda segmenty cesty a hash fragmenty odpovídají konfiguraci vašeho routeru. Odhalte chybně umístěná lomítka nebo neočekávané parametry dotazu dříve, než způsobí chyby 404.
Validace koncových bodů backend API
Ověřte, zda příchozí URL požadavků obsahují správný hostname, port a strukturu cesty, než začnete psát obslužné rutiny tras nebo middleware.
Testování pravidel přesměrování v DevOps
Při psaní pravidel přesměrování pro Nginx, Apache nebo CDN parsujte zdrojové i cílové URL a potvrďte, že se každá komponenta správně mapuje.
Ověřování odkazů v QA
Parsujte URL z testovacích reportů nebo hlášení chyb, abyste izolovali, který parametr dotazu nebo fragment způsobuje načtení nesprávné stránky.
Extrakce URL v datových pipeline
Extrahujte hostname nebo segmenty cest z URL v log souborech nebo analytických datech pro sestavení reportů na úrovni domén nebo filtrování provozu podle koncového bodu.
Výuka struktury URL
Studenti a vývojáři začínající s webovými protokoly mohou vložit skutečné URL a okamžitě vidět, který oddělovač označuje kterou hranici.

Přehled komponent URL

Tabulka níže zobrazuje každou vlastnost vrácenou JavaScript konstruktorem URL při parsování URL. Stejné komponenty existují ve výsledku Python urlparse, struktuře url.URL v Go a výstupu PHP parse_url, přestože se názvy vlastností mezi jazyky liší.

VlastnostPříkladPopis
protocolhttps:Scheme including the trailing colon
hostnameapi.example.comDomain name or IP address
port8080Port number (empty string if default)
pathname/v1/usersPath starting with /
search?page=2&limit=10Query string including the leading ?
hash#sectionFragment identifier including the leading #
originhttps://api.example.com:8080protocol + hostname + port
hostapi.example.com:8080hostname + port
usernameadminCredentials before @ (rarely used in practice)
passwordsecretCredentials before @ (avoid in production URLs)
href(full URL)The complete, serialized URL string

WHATWG URL Standard vs RFC 3986

Dvě specifikace definují způsob parsování URL. Shodují se na základní struktuře, ale liší se v hraničních případech — a tato odlišnost je obvykle příčinou, když váš prohlížeč zpracovává URL jinak než váš server.

WHATWG URL Standard
Používán všemi moderními prohlížeči a JavaScript konstruktorem URL. Přijímá a normalizuje nepřesné vstupy: chybějící schémata, zpětná lomítka jako oddělovače cest, mezinárodní doménová jména pomocí Punycode. Definován jako živý standard na url.spec.whatwg.org.
RFC 3986
Formální specifikace IETF (2005). Přísnější než WHATWG: odmítá některé vstupy, které prohlížeče akceptují. Používán mnoha serverovými knihovnami včetně Go net/url a Python urllib.parse. Definován v RFC 3986.

V praxi se většina rozdílů projevuje při parsování URL s mezinárodními doménovými jmény (IDN), chybějícími schématy nebo neobvyklými znaky. Parser WHATWG automaticky převádí IDN hostname na Punycode, zatímco striktní parsery RFC 3986 je mohou odmítnout. Pokud vložíte URL do tohoto nástroje a uvidíte jiné výsledky než váš serverový kód, rozdíl mezi WHATWG a RFC je nejpravděpodobnější příčinou.

Ukázky kódu

Každý hlavní jazyk má vestavěný parser URL. Níže uvedené příklady parsují stejnou URL a extrahují její komponenty. Všimněte si drobných rozdílů v pojmenování napříč jazyky: Python používá scheme místo protocol a Go vystavuje RawQuery místo search.

JavaScript (browser / Node.js)
const url = new URL('https://api.example.com:8080/v1/users?page=2&limit=10#section')

url.protocol  // → "https:"
url.hostname  // → "api.example.com"
url.port      // → "8080"
url.pathname  // → "/v1/users"
url.search    // → "?page=2&limit=10"
url.hash      // → "#section"

// Iterate over query parameters
for (const [key, value] of url.searchParams) {
  console.log(`${key} = ${value}`)
}
// → "page = 2"
// → "limit = 10"

// Modify and re-serialize
url.searchParams.set('page', '3')
url.toString()
// → "https://api.example.com:8080/v1/users?page=3&limit=10#section"
Python
from urllib.parse import urlparse, parse_qs

result = urlparse('https://api.example.com:8080/v1/users?page=2&limit=10#section')

result.scheme    # → 'https'
result.hostname  # → 'api.example.com'
result.port      # → 8080
result.path      # → '/v1/users'
result.query     # → 'page=2&limit=10'
result.fragment  # → 'section'

# Parse query string into a dict
params = parse_qs(result.query)
params['page']   # → ['2']
params['limit']  # → ['10']

# Reconstruct with modifications
from urllib.parse import urlencode, urlunparse
new_query = urlencode({'page': '3', 'limit': '10'})
urlunparse(result._replace(query=new_query))
# → 'https://api.example.com:8080/v1/users?page=3&limit=10#section'
Go
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u, err := url.Parse("https://api.example.com:8080/v1/users?page=2&limit=10#section")
	if err != nil {
		panic(err)
	}

	fmt.Println(u.Scheme)   // → "https"
	fmt.Println(u.Hostname()) // → "api.example.com"
	fmt.Println(u.Port())     // → "8080"
	fmt.Println(u.Path)       // → "/v1/users"
	fmt.Println(u.RawQuery)   // → "page=2&limit=10"
	fmt.Println(u.Fragment)   // → "section"

	// Query params as map
	q := u.Query()
	fmt.Println(q.Get("page"))  // → "2"
	fmt.Println(q.Get("limit")) // → "10"
}
PHP
<?php
$url = 'https://api.example.com:8080/v1/users?page=2&limit=10#section';
$parts = parse_url($url);

$parts['scheme'];   // → "https"
$parts['host'];     // → "api.example.com"
$parts['port'];     // → 8080
$parts['path'];     // → "/v1/users"
$parts['query'];    // → "page=2&limit=10"
$parts['fragment']; // → "section"

// Parse query string into an array
parse_str($parts['query'], $params);
$params['page'];    // → "2"
$params['limit'];   // → "10"

Nejčastější dotazy

Jaký je rozdíl mezi URL a URI?
URL (Uniform Resource Locator) je specifický typ URI (Uniform Resource Identifier), který zahrnuje jak identifikátor, tak přístupový mechanismus (schéma, jako https://). Všechny URL jsou URI, ale ne všechna URI jsou URL. URN jako urn:isbn:0451450523 je URI, které identifikuje zdroj názvem bez určení způsobu jeho získání. Ve webovém vývoji se tyto pojmy často používají zaměnitelně, protože téměř každé URI, s nímž se setkáte, je URL.
Jak konstruktor URL zpracovává relativní URL?
JavaScript konstruktor URL vyžaduje základní URL při parsování relativních cest. Volání new URL('/path?q=1') vyvolá TypeError. Musíte zadat základ: new URL('/path?q=1', 'https://example.com'). Python urljoin a Go url.ResolveReference slouží stejnému účelu. Tento nástroj očekává kompletní, absolutní URL se schématem.
Co se stane, když URL neobsahuje číslo portu?
Pokud je port vynechán, parser vrátí pro vlastnost port prázdný řetězec. Prohlížeč předpokládá výchozí port pro dané schéma: 443 pro https, 80 pro http, 21 pro ftp. K efektivnímu portu lze přistoupit přes vlastnost origin nebo host, ale pole port zůstane prázdné, protože nebyl zadán žádný explicitní port.
Může URL obsahovat znaky Unicode?
Ano, ale musí být zakódovány pro přenos. Standard WHATWG URL toto zpracovává automaticky: mezinárodní doménová jména jsou převedena na Punycode (předpona xn--) a znaky cesty a dotazu mimo rozsah ASCII jsou procentuálně zakódovány. Pokud do tohoto nástroje vložíte URL s Unicode, uvidíte ve výstupu parsování normalizovanou verzi kompatibilní s ASCII.
Jaká je maximální délka URL?
Žádný standard nedefinuje maximální délku URL — RFC 3986 toto téma neřeší. V praxi prohlížeče vynucují limity: Chrome podporuje v adresním řádku přibližně 2 MB, zatímco Internet Explorer (starší verze) měl limit 2 083 znaků. Většina webových serverů má výchozí limit 8 KB (Nginx) nebo 8 KB (Apache) pro řádek požadavku. Pokud potřebujete předávat velká data, použijte těla POST požadavků místo řetězců dotazu.
Jak parsovat pouze řetězec dotazu bez celé URL?
V JavaScriptu použijte new URLSearchParams('page=2&limit=10') pro parsování holého řetězce dotazu. V Pythonu použijte urllib.parse.parse_qs('page=2&limit=10'). Oba vrátí parametry jako páry klíč-hodnota. To je užitečné, když máte řetězec dotazu izolovaně — například z odeslání formuláře nebo záznamu v logu, který zachytil pouze část s dotazem.
Je parsování URL totéž jako dekódování URL?
Ne. Parsování URL rozdělí URL na strukturální komponenty (schéma, host, cesta, dotaz, fragment). Dekódování URL převede procentuálně zakódované znaky zpět do původní podoby (%20 se stane mezerou, %26 se stane &). Obě operace se vzájemně doplňují: obvykle nejprve parsujete URL a poté dekódujete hodnoty jednotlivých komponent. Dekódování před parsováním může narušit strukturu URL, protože dekódované oddělovače jako & a = by byly chybně interpretovány.