Wie kann man den Host und den Port in einer IPv6-URL unterscheiden?


87

URLs haben immer folgendes Format:

<protocol>://<host>[:<port>]/[<path>][#<hash>]

Das Problem ist, dass IPv6 Doppelpunkte verwendet, genau wie das Trennzeichen von Port und Host, zB:

2001:db8:1f70::999:de8:7648:6e8

Aber was ist, wenn dies der Host ist und ich über HTTP auf Port 100 eine Verbindung herstellen möchte?

http://2001:db8:1f70::999:de8:7648:6e8:100/

Das Problem ist der letzte Doppelpunkt. Da Nullen mit Doppelpunkten (zwischen 1f70 und 999) weggelassen werden, ist nicht bekannt, ob ': 100' zur IP oder zur Portnummer gehört. Wie können wir das wissen?

Antworten:


118

In diesem Fall muss die IPv6-IP-Nummer in eckigen Klammern angegeben werden:

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

Das ist RFC 3986 , Abschnitt 3.2.2: Host

Ein Host, der durch eine Internet Protocol-Literaladresse (Version 6 [RFC3513] oder höher) identifiziert wird, wird dadurch gekennzeichnet, dass das IP-Literal in eckige Klammern ("[" und "]") eingeschlossen wird. Dies ist der einzige Ort, an dem eckige Klammern in der URI-Syntax zulässig sind. In Erwartung zukünftiger, noch nicht definierter IP-Literal-Adressformate kann eine Implementierung ein optionales Versionsflag verwenden, um ein solches Format explizit anzugeben, anstatt sich auf eine heuristische Bestimmung zu verlassen.


38
Es sei darauf hingewiesen, dass die Klammern nicht optional sind. Dies ist der einzige eindeutige Mechanismus, mit dem der Browser eine numerische IPv6-Adresse identifizieren kann.
TylerL

Sollte sich der Port nicht in den Klammern befinden?
Jayarjo

2
@jayarjo Nein, da die Klammern eine eindeutige Trennung zwischen der IP-Adresse, die Doppelpunkte enthält, und dem Port ermöglichen, der durch einen Doppelpunkt von der IP-Adresse getrennt ist.
sysadmin1138
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.