Come si può distinguere l'host e la porta in un URL IPv6?


87

Gli URL hanno sempre questo formato:

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

Il problema è che IPv6 utilizza due punti, proprio come il separatore di porta e host, ad esempio:

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

Ma cosa succede se questo è l'host e voglio connettermi ad esso con HTTP sulla porta 100?

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

Il problema è l'ultimo colon. Poiché gli zero vengono omessi con due punti (tra 1f70 e 999), non si sa se ': 100' appartiene all'IP o al numero di porta. Come possiamo saperlo?

Risposte:


118

La notazione in tal caso è codificare il numero IP IPv6 tra parentesi quadre:

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

Questo è RFC 3986 , sezione 3.2.2: Host

Un host identificato da un indirizzo letterale di Internet Protocol, versione 6 [RFC3513] o successive, si distingue racchiudendo il valore letterale IP tra parentesi quadre ("[" e "]"). Questo è l'unico posto in cui sono consentiti caratteri di parentesi quadre nella sintassi URI. In previsione di formati di indirizzi letterali IP futuri, non ancora definiti, un'implementazione può utilizzare un flag di versione facoltativo per indicare esplicitamente tale formato piuttosto che fare affidamento sulla determinazione euristica.


38
Vale la pena sottolineare che le parentesi non sono opzionali. È l'unico meccanismo inequivocabile con cui il browser può identificare un indirizzo IPv6 numerico.
tylerl,

La porta non dovrebbe trovarsi tra le parentesi?
jayarjo,

2
@jayarjo No, poiché le parentesi sono lì per fornire chiarimenti tra l'indirizzo IP, che contiene due punti e la porta, che è separata dall'indirizzo IP da due punti.
sysadmin1138
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.