Как разобрать URL на части: протокол, домен, путь и параметры
Ссылка вроде https://example.com/catalog/search?q=phone&page=2#results выглядит как каша. Но внутри неё всё строго: каждая часть отвечает за своё, и когда вы понимаете, какая — «странные» адреса перестают быть странными. Разберём по косточкам, а для проверки можно открыть парсер URL: вставляете ссылку — получаете разбор по полям.
Семь частей одной ссылки
- протокол — как общаться с сервером: https — защищённо, http — без шифрования, ftp — для файлов;
- домен — имя сервера: example.com. Буквы после точки — поддомен (www, m, api);
- порт — технически идёт после домена через двоеточие (:443), но почти всегда опускается, потому что у каждого протокола порт по умолчанию;
- путь — что именно запросить: /catalog/search;
- параметры — всё после знака вопроса: ?q=phone&page=2. Пары «ключ=значение» разделены амперсандом;
- якорь — после решётки: #results. К серверу не отправляется, это метка внутри уже открытой страницы.
- иногда встречается ещё userinfo (логин:пароль@) — наследие старины, сейчас почти не используется и в приличных ссылках его быть не должно.
Зачем уметь читать параметры
Параметры — это способ передать серверу данные через саму ссылку. Поиск, фильтры каталога, номер страницы, UTM-метки рекламных кампаний — всё это живёт там. Умея читать query-параметры, вы можете скопировать ссылку с настроенными фильтрами и отправить коллеге — он увидит ровно то, что видели вы. А маркетолог по UTM-меткам (?utm_source=telegram) поймёт, из какого канала пришёл клиент.
Второй практический случай — отладка. Когда «сайт не открывается», первым делом смотрят на URL: правильный ли протокол, нет ли лишних параметров, не сломан ли путь. Ошибки вроде двойного слэша или процентного кодирования (%20 вместо пробела) видны сразу в разобранном виде.
Частые ловушки
- проценты в параметрах: пробел в URL не живёт — он превращается в %20. Кириллица кодируется ещё длиннее (по два-три байта на букву);
- якорь теряется при переходах: сервер его не видит, поэтому в статистике переходов #results никогда не будет;
- порядок параметров не важен для сервера, но важен для кэша: ?a=1&b=2 и ?b=2&a=1 для него — разные строки;
- http и https — разные origin: если страница открыта по https, запросы на http-версию заблокирует браузер.
Разобрать длинную ссылку руками можно, но незачем: вставьте её в парсер URL — получите протокол, домен, путь, каждый параметр отдельной строкой и разбор якоря. Работает прямо в браузере, ссылка никуда не отправляется.