Comment distinguer l'hôte et le port dans une URL IPv6?

87

Les URL ont toujours ce format:

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

Le problème est qu'IPv6 utilise des deux points, tout comme le séparateur de port et d'hôte, par exemple:

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

Mais que se passe-t-il s'il s'agit de l'hôte et que je souhaite me connecter via HTTP sur le port 100?

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

Le problème est le dernier colon. Étant donné que les zéros sont omis avec des doubles points (entre 1f70 et 999), on ignore si ': 100' appartient à l'IP ou au numéro de port. Comment pouvons-nous savoir cela?

droitier
la source

Réponses:

118

La notation dans ce cas consiste à coder le numéro IP IPv6 entre crochets:

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

C’est la RFC 3986 , section 3.2.2: Host

Un hôte identifié par une adresse littérale de protocole Internet, version 6 [RFC3513] ou ultérieure, est distingué en entourant le littéral IP entre crochets ("[" et "]"). C’est le seul endroit où les caractères entre crochets sont autorisés dans la syntaxe URI. En prévision de futurs formats d'adresses littérales IP encore indéfinis, une implémentation peut utiliser un indicateur de version facultatif pour indiquer explicitement un tel format plutôt que de s'appuyer sur une détermination heuristique.

sysadmin1138
la source
38
Il convient de souligner que les crochets ne sont pas facultatifs. C'est le seul mécanisme sans ambiguïté par lequel le navigateur peut identifier une adresse IPv6 numérique.
Tylerl
Le port ne devrait-il pas être à l'intérieur des crochets?
jayarjo
2
@jayarjo Non, car les crochets sont là pour fournir la désambiguïsation entre l'adresse IP, qui contient des deux points, et le port, qui est séparé de l'adresse IP par un signe deux-points.
sysadmin1138