ToolDeck

URL Parser

Dela upp en URL i dess komponenter — protokoll, värd, sökväg, frågeparametrar, fragment

Prova ett exempel

Vad är URL-parsning?

URL-parsning är processen att dela upp en Uniform Resource Locator i dess enskilda komponenter: protokoll (schema), värdnamn, port, sökväg, frågeparametrar och fragmentidentifierare. Varje URL följer en struktur definierad av RFC 3986 och WHATWG URL Standard. En URL-parser läser rå-strängen, identifierar varje segment utifrån avgränsningstecken (://, :, /, ?, #, &, =) och returnerar dem som separata, åtkomliga fält.

Webbläsare utför URL-parsning varje gång du skriver in en adress eller klickar på en länk. JavaScripts URL-konstruktor, Pythons urllib.parse-modul och Gos net/url-paket implementerar alla parsers som följer samma strukturregler. Att parsa en URL är det omvända mot URL-kodning: istället för att transformera tecken för säker transport delar du upp en redan sammansatt URL i de delar som bygger upp den.

En typisk URL som https://api.example.com:8080/v1/users?page=2&limit=10#section innehåller sex distinkta komponenter. Avgränsningstecknen — ://, :, /, ?, &, = och # — gör parsningen deterministisk: vart och ett signalerar en gräns och låter en parser extrahera fält utan tvetydighet.

Varför använda en URL-parser online?

Att manuellt dela upp en URL för hand är felkänsligt, särskilt när strängen innehåller kodade tecken, flera frågeparametrar eller icke-standardiserade portar. Det här verktyget parsar URL:en med samma WHATWG-kompatibla algoritm som webbläsare använder och visar varje komponent i en tydlig tabell som enkelt kan kopieras.

Parsa direkt i webbläsaren
Klistra in valfri URL och se alla komponenter uppdelade omedelbart. Ingen sidladdning, inget serveranrop, ingen väntan.
🔒
Håll dina URL:er privata
Parsningen körs helt i din webbläsare med hjälp av det inbyggda URL-API:et. URL:en du anger lämnar aldrig din dator.
🔍
Inspektera varje detalj
Se protokoll, värdnamn, port, sökväg, frågesträng, fragment och varje enskild frågeparameter med sitt avkodade värde.
📋
Kopiera enskilda komponenter
Klicka på kopieringsknappen bredvid valfritt fält för att hämta det exakta värdet. Inget behov av att manuellt markera och trimma delsträngar.

Användningsfall för URL Parser

Felsökning av frontend-routing
Kontrollera att sökvägssegment och fragmentidentifierare matchar din router-konfiguration. Upptäck felplacerade snedstreck eller oväntade frågeparametrar innan de orsakar 404-fel.
Validering av backend-API-endpoints
Verifiera att inkommande förfrågnings-URL:er innehåller rätt värdnamn, port och sökvägsstruktur innan du skriver route-hanterare eller middleware.
Testning av DevOps-omdirigeringsregler
När du skriver omdirigeringsregler för Nginx, Apache eller CDN, parsa käll- och mål-URL:er för att bekräfta att varje komponent mappas korrekt.
QA-verifiering av länkar
Parsa URL:er från testrapporter eller felärenden för att isolera vilken frågeparameter eller vilket fragment som gör att fel sida läses in.
URL-extraktion i datapipelines
Extrahera värdnamn eller sökvägssegment från URL:er i loggfiler eller analysdata för att bygga domänbaserade rapporter eller filtrera trafik per endpoint.
Lära sig URL-struktur
Studenter och utvecklare som är nya inom webbprotokoll kan klistra in riktiga URL:er och omedelbart se vilket avgränsningstecken som markerar vilken gräns.

Referens för URL-komponenter

Tabellen nedan visar alla egenskaper som returneras av JavaScripts URL-konstruktor vid parsning av en URL. Samma komponenter finns i Pythons urlparse-resultat, Gos url.URL-struct och PHPs parse_url-utdata, även om egenskapsnamnen skiljer sig åt mellan språken.

EgenskapExempelBeskrivning
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

Två specifikationer definierar hur URL:er ska parsas. De är överens om den grundläggande strukturen men skiljer sig i gränsfall — och den skillnaden är oftast orsaken till att din webbläsare hanterar en URL annorlunda än din server gör.

WHATWG URL Standard
Används av alla moderna webbläsare och JavaScripts URL-konstruktor. Accepterar och normaliserar slarviga indata: saknade scheman, omvända snedstreck som sökvägsseparatorer, icke-ASCII-värdnamn via Punycode. Definierad som ett levande standarddokument på url.spec.whatwg.org.
RFC 3986
Den formella IETF-specifikationen (2005). Striktare än WHATWG: avvisar vissa indata som webbläsare accepterar. Används av många server-side-bibliotek, inklusive Gos net/url och Pythons urllib.parse. Definierad i RFC 3986.

I praktiken uppstår de flesta skillnaderna vid parsning av URL:er med internationella domännamn (IDN), saknade scheman eller ovanliga tecken. WHATWG-parsern konverterar IDN-värdnamn till Punycode automatiskt, medan strikta RFC 3986-parsers kan avvisa dem. Om du klistrar in en URL i det här verktyget och ser andra resultat än din server-side-kod producerar är WHATWG vs RFC-skillnaden den troligaste orsaken.

Kodexempel

Alla större programspråk har en inbyggd URL-parser. Exemplen nedan parsar samma URL och extraherar dess komponenter. Notera de mindre namngivningsskillnaderna mellan språken: Python använder scheme istället för protocol, och Go exponerar RawQuery istället för 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"

Vanliga frågor

Vad är skillnaden mellan en URL och en URI?
En URL (Uniform Resource Locator) är en specifik typ av URI (Uniform Resource Identifier) som inkluderar både identifieraren och åtkomstmekanismen (schemat, som https://). Alla URL:er är URI:er, men inte alla URI:er är URL:er. En URN som urn:isbn:0451450523 är en URI som identifierar en resurs med namn utan att ange hur den hämtas. Inom webbutveckling används begreppen ofta synonymt eftersom nästan alla URI:er man stöter på är URL:er.
Hur hanterar URL-konstruktorn relativa URL:er?
JavaScripts URL-konstruktor kräver en bas-URL vid parsning av relativa sökvägar. Att anropa new URL('/path?q=1') kastar ett TypeError. Du måste ange en bas: new URL('/path?q=1', 'https://example.com'). Pythons urljoin och Gos url.ResolveReference fyller samma funktion. Det här verktyget förväntar sig fullständiga, absoluta URL:er med ett schema.
Vad händer när en URL saknar portnummer?
När porten utelämnas returnerar parsern en tom sträng för port-egenskapen. Webbläsaren antar standardporten för schemat: 443 för https, 80 för http, 21 för ftp. Du kan komma åt den effektiva porten via origin- eller host-egenskapen, men port-fältet förblir tomt eftersom ingen explicit port angavs.
Kan en URL innehålla Unicode-tecken?
Ja, men de måste kodas för transport. WHATWG URL Standard hanterar detta automatiskt: internationella domännamn konverteras till Punycode (xn---prefix) och tecken utanför ASCII-intervallet i sökväg och frågesträng procentkodas. Om du klistrar in en URL med Unicode i det här verktyget ser du den normaliserade, ASCII-säkra versionen i det parsade resultatet.
Vad är den maximala längden på en URL?
Ingen standard definierar en maximal URL-längd — RFC 3986 är tyst i frågan. I praktiken tillämpar webbläsare begränsningar: Chrome stöder upp till ungefär 2 MB i adressfältet, medan Internet Explorer (äldre) hade en gräns på 2 083 tecken. De flesta webbservrar har en standardgräns på 8 KB (Nginx) eller 8 KB (Apache) för request-raden. Om du behöver skicka stora datamängder, använd POST-anfrågekroppar istället för frågesträngar.
Hur parsar jag bara frågesträngen utan den fullständiga URL:en?
I JavaScript, använd new URLSearchParams('page=2&limit=10') för att parsa en fristående frågesträng. I Python, använd urllib.parse.parse_qs('page=2&limit=10'). Båda returnerar parametrarna som nyckel-värde-par. Detta är användbart när du har frågesträngen isolerat, till exempel från en formulärinlämning eller en loggpost som bara fångade frågedelen.
Är URL-parsning detsamma som URL-avkodning?
Nej. URL-parsning delar upp en URL i strukturella komponenter (schema, värd, sökväg, frågesträng, fragment). URL-avkodning konverterar procentkodade tecken tillbaka till sin ursprungliga form (%20 blir ett mellanslag, %26 blir &). De två operationerna kompletterar varandra: du parsar vanligtvis URL:en först och avkodar sedan enskilda komponentvärden. Att avkoda före parsning kan bryta URL-strukturen eftersom avkodade avgränsningstecken som & och = skulle feltolkas.