Pregunta ¿Cómo se puede distinguir el host y el puerto en una URL de IPv6?


Las URL siempre tienen este formato:

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

El problema es que IPv6 usa dos puntos, al igual que el separador de puerto y host, por ejemplo:

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

¿Pero qué pasa si este es el host y quiero conectarme con HTTP en el puerto 100?

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

El problema es el último colon. Como los cero se omiten con dos puntos dobles (entre 1f70 y 999), no se sabe si ': 100' pertenece a la IP o al número de puerto. ¿Cómo podemos saber esto?


80
2017-11-24 22:48


origen




Respuestas:


La notación en ese caso es codificar el número de IPv6 entre corchetes:

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

Eso es RFC 3986, sección 3.2.2: Anfitrión

Un host identificado por una dirección literal de Protocolo de Internet, versión 6       [RFC3513] o posterior, se distingue encerrando el literal IP       entre corchetes ("[" y "]"). Este es el único lugar donde       los caracteres de corchete están permitidos en la sintaxis URI. En       anticipación del futuro, formatos de direcciones literales IP aún no definidos,       una implementación puede usar un indicador de versión opcional para indicar tal       Formato explícitamente en lugar de confiar en la determinación heurística.


111
2017-11-24 22:51



Vale la pena señalar que los soportes son no Opcional. Es el único mecanismo inequívoco mediante el cual el navegador puede identificar una dirección IPv6 numérica. - tylerl
¿No debería el puerto estar dentro de los soportes? - jayarjo
@jayarjo No, ya que los paréntesis están ahí para proporcionar la desambiguación entre la dirección IP, que contiene dos puntos, y el puerto, que está separado de la dirección IP por dos puntos. - sysadmin1138♦