Як можна відрізнити хост і порт в URL-адресі IPv6?


87

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 або до номера порту. Як ми можемо це знати?

Відповіді:


118

Позначення в цьому випадку полягає в кодуванні IP-номера IPv6 в квадратних дужках:

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

Це RFC 3986 , розділ 3.2.2: Хост

Хост, ідентифікований буквальною адресою Інтернет-протоколу, версія 6 [RFC3513] або пізнішої версії, відрізняється тим, що додає IP-літерал у квадратні дужки ("[" і "]"). Це єдине місце, де в синтаксисі URI дозволено символи квадратних дужок. В очікуванні майбутніх, ще не визначених форматів прямої адреси IP, реалізація може використовувати необов’язковий прапор версії для явного позначення такого формату, а не покладатися на евристичне визначення.


38
Варто зазначити, що дужки не є обов'язковими. Це єдиний однозначний механізм, за допомогою якого браузер може ідентифікувати числову адресу IPv6.
tylerl

Чи не повинен порт бути всередині дужок?
jayarjo

2
@jayarjo Ні, оскільки дужки є для розбіжності між IP-адресою, яка містить колонки, і портом, який відокремлений від IP-адреси двокрапкою.
sysadmin1138
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.