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-адресов, реализация может использовать необязательный флаг версии для явного указания такого формата, а не полагаться на эвристическое определение.