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


URLs haben immer dieses Format:

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

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

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

Aber was ist, wenn dies der Host ist, und ich möchte mich mit HTTP an Port 100 verbinden?

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

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


80
2017-11-24 22:48


Ursprung




Antworten:


Die Schreibweise in diesem Fall besteht darin, die IPv6-IP-Nummer in eckigen Klammern zu codieren:

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

Das ist RFC 3986, Abschnitt 3.2.2: Host

Ein Host, der durch eine Internetprotokoll-Literaladresse, Version 6, identifiziert wird       [RFC3513] oder später, wird durch Einschließen des IP-Literals unterschieden       in eckigen Klammern ("[" und "]"). Dies ist der einzige Ort, an dem       eckige Klammerzeichen sind in der URI-Syntax erlaubt. Im       Antizipation zukünftiger, noch nicht definierter IP-Adressformate,       Eine Implementierung kann ein optionales Versionskennzeichen verwenden, um ein solches anzuzeigen       formatieren Sie explizit, anstatt sich auf heuristische Bestimmung zu verlassen.


111
2017-11-24 22:51



Es ist erwähnenswert, dass die Klammern sind nicht wahlweise. Es ist der einzige eindeutige Mechanismus, mit dem der Browser eine numerische IPv6-Adresse identifizieren kann. - tylerl
Sollte der Hafen nicht innerhalb der Klammern sein? - jayarjo
@jayarjo Nein, da die Klammern zur Unterscheidung zwischen der IP-Adresse, die Doppelpunkte enthält, und dem Port, der durch einen Doppelpunkt von der IP-Adresse getrennt ist, dienen. - sysadmin1138♦