Разобрать URL: схема, домен, порт, параметры

Парсер URL: разложите ссылку на части — схема, логин и пароль, домен в punycode и юникоде, порт, путь, параметры и якорь. Расшифровка параметров и сборка обратно.

Адрес

Подойдёт и адрес без схемы (//example.com), и относительный (/path?x=1). Пробелы, кириллицу и табы инструмент приведёт к каноническому виду.

Тип: Пусто

Адрес пуст: введите ссылку, чтобы увидеть её части.

Собрать адрес

Правьте любое поле — адрес пересобирается сразу

Часть перед собакой

Открытым текстом, как и в самом адресе

Можно кириллицей: при сборке станет punycode

Пусто — стандартный для схемы

Пробелы закодируются в %20

Параметры через «&», без знака «?»

Метка после «#», без самого знака

Итоговый адрес

Части пусты — соберите адрес из полей выше.

Разбор адреса

Одна строка на часть: что в ней стоит и что она значит

ЧастьЗначениеЧто этоДействие
Схемане заданоОпределяет, как открывать адрес. У веб-ссылок это http или https.
Логинне заданоИмя пользователя перед собакой. В веб-адресах встречается редко.
Парольне заданоСтоит после двоеточия в логине. Передаётся открытым текстом: по адресу видно всем, кто его увидит.
Хостне заданоДомен вместе с портом — то, куда уходит запрос.
Домен (hostname)не заданоДомен без порта, в том виде, в каком он уходит в сеть.
Домен (юникод)не заданоТо же имя в читаемом виде — так его показывает адресная строка браузера.
Портне заданоНомер порта на сервере. Если не указан, берётся стандартный для схемы: 443 у https, 80 у http.
Путь (pathname)не заданоАдрес страницы или файла внутри сайта. Пробелы и кириллица в нём кодируются.
Запрос (query)не заданоПараметры после знака «?» — то, что передают серверу, например номер страницы или метку источника.
Якорь (hash)не заданоМетка внутри страницы после «#». На сервер не уходит: по ней браузер сам прокручивает страницу.
Источник (origin)не заданоСхема и домен вместе. По источнику браузер решает, тот же это сайт или другой. У схем без домена источника нет — это и значит «null».

Параметры запроса

Имена и значения после декодирования: %D0%BF снова читается как «п», а «+» — как пробел

В адресе нет строки запроса: параметров не нашлось. Добавьте их в поле «Строка запроса» — таблица заполнится сразу.

Зачем разбирать адрес на части

Адрес устроен проще, чем кажется, пока не понадобится вытащить из него одну часть: схема говорит, по какому протоколу идти; логин с паролем перед собакой — кто запрашивает; домен — куда; порт — в какую дверь; путь — что именно; строка после «?» — с какими условиями; якорь после «#» — на какое место страницы. Ошибка в любой части ломает ссылку целиком, а глазами её не видно: адрес с опечаткой в домене или лишним пробелом в пути выглядит совершенно нормально.

Инструмент раскладывает адрес на эти части и показывает рядом то, что в нём записано на самом деле: кириллицу в декодированном виде, домен — и в punycode, и в юникоде, параметры — с расшифрованными именами и значениями. Заодно видно, что адрес пришлось поправить: пробелы закодировать, домен привести к punycode, регистр схемы опустить. Это тот же вид, который в итоге уходит на сервер, — по нему понятно, почему ссылка из мессенджера иногда не открывается: в ней остались пробелы или знаки, которых в адресе быть не может.

Обратная операция — сборка: поля частей редактируются, и адрес под ними пересобирается сразу, без кнопки «Применить». Это удобно, когда нужно поменять домен в длинной ссылке с параметрами, поправить путь или заменить порт, не трогая остальное. Всё считается в браузере, поэтому сюда можно вставлять адреса со служебными параметрами и токенами: они не уходят ни на сервер, ни в аналитику.

Частые вопросы

Как разобрать ссылку на части?

Вставьте адрес в поле сверху — разбор появится сразу, нажимать ничего не нужно. Таблица «Разбор адреса» показывает схему, логин и пароль, хост, домен в punycode и в юникоде, порт, путь, строку запроса, якорь и источник. Того, чего в адресе нет, в таблице стоит «не задано»: пустая ячейка читалась бы как ошибка разбора, а не как отсутствие части.

Где править параметры запроса и при чём тут URL encode?

Параметры правятся и здесь: в панели «Собрать адрес» есть поле «Строка запроса», и адрес под ним пересобирается сразу. Это удобно для одной-двух правок, а когда записей много — их надо добавить, удалить, продублировать или переставить порядок — возьмите «Редактор параметров URL»: он раскладывает строку запроса в таблицу с именами, значениями, повторами имён, «+» и %20, собирает результат обратно и умеет дописывать UTM-метки, не теряя остальные параметры. Другая задача — перевести строку в проценты и обратно; для неё есть инструмент «Экранировать и разэкранировать текст» в категории «Работа с текстом»: там URL encode и decode применяются к произвольной строке, а не к адресу целиком. Проще говоря, этот инструмент отвечает на вопрос «из чего состоит ссылка», «Редактор параметров URL» — «какие параметры в ней оставить», а экранирование — «как записать в ней пробел».

Почему вставленный адрес изменился?

Инструмент показывает канонический вид адреса — тот, который в итоге уйдёт в сеть. Пробелы в пути становятся %20, кириллица — процентными последовательностями, домен — punycode, схема и домен приводятся к нижнему регистру, а табы и переносы строк выбрасываются совсем. Под полем есть список «Что изменено в адресе»: там по пунктам написано, что именно поправлено. Само поле при этом остаётся вашим — каноническую строку можно забрать кнопкой «В исходник».

Что такое punycode и зачем рядом юникод-вид домена?

Домены с кириллицей в сети передаются в виде ASCII-совместимой кодировки punycode: «пример.рф» уходит как «xn--e1afmkfd.xn--p1ai». В таблице показаны оба вида: punycode — то, что реально уйдёт на сервер, юникод — то, что покажет адресная строка браузера. Расхождение объясняет, почему домен, скопированный из адресной строки, иногда выглядит непонятным набором букв и дефисов.

Что значит «не задано» в части адреса?

Это значит, что части в адресе нет. У относительного адреса нет ни схемы, ни домена — он считается от текущей страницы сайта; у адреса без схемы (`//example.com`) домен есть, а схемы нет, и браузер подставит ту, по которой открыта страница; без порта берётся стандартный порт схемы. Отсутствие части — не ошибка: адрес из одного якоря (#top) тоже разбирается, хотя в нём нет ничего, кроме метки.

Почему у параметра написано «повтор»?

Одно и то же имя встречается в строке запроса несколько раз: `?page=2&page=3`. Стандарт такие повторы разрешает и сохраняет порядок, поэтому в таблице обе записи остаются на своих местах, а счётчик сверху показывает и число параметров, и число уникальных имён. Как поступит сервер — зависит от него: чаще всего берёт первое или последнее значение, но бывает и так, что читает все, — поэтому повторы лучше убрать вручную, если они попали в адрес случайно.

Можно ли собрать адрес обратно из частей?

Да, это и есть обратная операция. Поля в панели «Собрать адрес» редактируемые: правка любого из них сразу пересобирает адрес в поле сверху, а правка самого адреса переразбирает части. Домен можно вводить кириллицей — при сборке он сам станет punycode, а пробелы в пути и запросе закодируются. Кнопка «Копировать» заберёт готовый адрес, «В исходник» — перенесёт его в поле разбора.

Данные отправляются на сервер?

Нет. Разбор и сборка идут целиком в браузере на JavaScript: адрес никуда не передаётся, не сохраняется и не логируется — в том числе вместе с логином и паролем, если они в нём есть. Проверить просто: отключите интернет и продолжите работу, разбор останется прежним. Обратная сторона в том, что при обновлении вкладки введённое пропадёт, поэтому нужный адрес лучше скопировать сразу.