URL-Parser

Parse jede URL in Protokoll, Host, Port, Pfad, Abfrage und Fragment mit dem WHATWG-URL-Standard. Abfrageparameter werden in eine lesbare Tabelle dekodiert.

Zerlege eine URL in jede Komponente, die der Browser sieht. Füge eine URL ein und jeder Teil wird mit demselben WHATWG-Parser extrahiert, den dein Browser verwendet, sodass das Ergebnis genau mit der tatsächlichen Interpretation der URL übereinstimmt. Abfrageparameter werden in eine Tabelle dekodiert.

Abfrageparameter

Die Anatomie einer URL

Die Form einer URL

Jede absolute URL folgt demselben Gerüst:

scheme://user:password@host:port/path?query#fragment

Die meisten URLs nutzen nur einige dieser Plätze, aber die Grammatik erlaubt sie alle. Eine URL zu lesen ist weitgehend eine Frage, zu wissen, wo eine Komponente endet und die nächste beginnt, was durch die Trennzeichen ://, @, :, /, ? und # entschieden wird.

Komponente für Komponente

Protokoll (Scheme) identifiziert, wie die Ressource abgerufen wird – https:, mailto:, ftp:. Beachte, dass der WHATWG-Parser den nachgestellten Doppelpunkt in diesem Wert einschließt, was Menschen überrascht, die ihn mit der Zeichenfolge "https" vergleichen.

Benutzername und Passwort sind der veraltete Userinfo-Abschnitt. Browser parsen sie noch, entfernen sie aber aus Anfragen und warnen oft, weil das Einbetten von Anmeldedaten in eine URL sie in Verlauf, Protokollen und Referrer-Headern preisgibt. Behandle ihr Vorhandensein in einer URL, die du nicht geschrieben hast, als Phishing-Signal.

Hostname ist die Domain oder IP-Adresse allein. Host ist der Hostname plus der Port, wenn ein nicht-standardmäßiger Port vorhanden ist, weshalb die beiden Felder hier oft identisch aussehen.

Port ist leer, wenn die URL den Standardport des Schemas nutzt – 443 für https, 80 für http. Der Parser normalisiert das: example.com:443/ meldet einen leeren Port, weil 443 keine Information hinzufügt.

Pfad ist alles vom ersten / bis zur Abfrage. Er ist die einzige Komponente, die für eine http(s)-URL nie leer ist; ein nackter Origin erhält einen Pfad von /.

Abfragezeichenfolge beginnt bei ? und trägt die Parameter. Fragment beginnt bei # und ist der einzige Teil, der nie an den Server gesendet wird – er wird rein clientseitig behandelt, weshalb Single-Page-Apps ihn früher für Routing nutzten und weshalb ein Zugriffstoken in einem Fragment aus Serverprotokollen herausbleibt.

Origin ist das sicherheitsrelevante Tripel aus Scheme, Host und Port. Zwei URLs teilen ein Origin nur, wenn alle drei übereinstimmen, und genau darauf basieren die Same-Origin-Policy und CORS-Entscheidungen.

Warum der Parser strikt ist

Der WHATWG-URL-Parser akzeptiert nur absolute URLs. example.com/page hat kein Schema, also kann es nicht allein geparst werden – der Parser kann nicht wissen, ob du example.com/page oder einen relativen Pfad meintest. Echter Code löst relative Referenzen gegen eine Basis-URL auf; dieses Werkzeug verlangt bewusst die absolute Form, damit eindeutig ist, was du siehst.

Normalisierung, die dir auffallen wird

Der Parser gibt nicht die Rohzeichenfolge zurück. Er macht Scheme und Host klein, löst .- und ..-Segmente im Pfad auf, lässt Standard-Ports weg und wandelt internationalisierte Domains in ihre Punycode-Form um, sodass münchen.de einen Hostnamen von xn--mnchen-3ya.de meldet. Das ist eine Funktion: Sie zeigt dir die URL so, wie der Netzwerk-Stack sie tatsächlich behandeln wird, nicht so, wie sie getippt wurde.

Wiederholte Parameter

Eine Abfragezeichenfolge darf eine Taste legitim wiederholen, wie in ?tag=a&tag=b. Es gibt keine Spezifikation, was das bedeutet – manche Frameworks nehmen den ersten Wert, manche den letzten, manche sammeln ein Array. Die Tabelle hier listet jede Vorkommen in Reihenfolge auf, sodass du genau siehst, was gesendet wurde, statt einer zusammengefassten Ansicht.

Open-Source-Hinweis: implementiert mit den eingebauten WHATWG-URL- und URLSearchParams-APIs des Browsers. Es wird keine Drittanbieter-Bibliothek verwendet.

FAQs

Warum ist das Port-Feld leer?
Weil die URL den Standardport für ihr Schema nutzt. Der WHATWG-Parser lässt 443 für https und 80 für http weg, da ihre Angabe keine Information hinzufügt und Origin-Vergleiche sonst bräche.
Warum enthält das Protokoll einen Doppelpunkt?
Das ist es, was der URL-Standard definiert. Die Protokoll-Eigenschaft ist 'https:' statt 'https'. Wenn du gegen einen nackten Schemanamen vergleichst, denk daran, den nachgestellten Doppelpunkt zu berücksichtigen.
Was ist der Unterschied zwischen Host und Hostname?
Hostname ist die Domain allein. Host enthält den Port, wenn einer vorhanden ist. Für https://example.com:8443/ ist der Hostname example.com und der Host example.com:8443.
Warum kann ich keine relative URL parsen?
Eine relative Referenz wie /about oder ../img.png hat nur gegen eine Basis-URL eine Bedeutung. Der Parser verlangt eine absolute URL mit Schema, damit das Ergebnis eindeutig ist.
Wird das Fragment an den Server gesendet?
Nein. Der Teil nach # wird in einer HTTP-Anfrage nie übertragen. Er wird vollständig im Browser aufgelöst, weshalb OAuth-Implicit-Flows ihn nutzten, um Token aus Serverprotokollen herauszuhalten.
Warum hat sich meine Unicode-Domain geändert?
Internationalisierte Domains werden in Punycode umgewandelt, die tatsächlich von DNS genutzte ASCII-Form. münchen.de wird zu xn--mnchen-3ya.de. Das ist dieselbe Umwandlung, die dein Browser vor der Anfrage vornimmt.