Назад | Перейти на главную страницу

Как отличить хост и порт в URL-адресе IPv6?

URL-адреса всегда имеют следующий формат:

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

Проблема в том, что IPv6 использует двоеточия, как и разделитель порта и хоста, например:

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

Но что, если это хост, и я хочу подключиться к нему по HTTP через порт 100?

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

Проблема в последнем двоеточии. Поскольку нули опускаются с двойным двоеточием (между 1f70 и 999), неизвестно, принадлежит ли «: 100» IP или номеру порта. Как мы можем это знать?

Обозначение в этом случае заключается в кодировании IP-адреса IPv6 в квадратных скобках:

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

Это RFC 3986, раздел 3.2.2: Хост

Хост, идентифицированный буквальным адресом Интернет-протокола версии 6 [RFC3513] или более поздней версии, выделяется заключением литерала IP в квадратные скобки («[» и «]»). Это единственное место, где в синтаксисе URI разрешены символы квадратных скобок. В ожидании будущих, пока еще не определенных форматов буквальных IP-адресов, реализация может использовать необязательный флаг версии для явного указания такого формата, а не полагаться на эвристическое определение.