Адрес
Параметры запроса
Процентное кодирование
Что стоит помнить
Пробел кодируется двумя способами. В пути это %20, а в строке запроса исторически ещё и +. Раскодируете query обычным decodeURIComponent — плюсы останутся плюсами, и «Иван Петров» превратится в «Иван+Петров». Здесь параметры разбираются по правилам query, поэтому плюс становится пробелом.
Повторяющиеся параметры — норма. ?id=1&id=2 допустимо, и языки обрабатывают это по-разному: где-то возьмётся первый, где-то последний, где-то список. Ниже такие параметры показаны все, отдельными строками — расхождение бэкенда с фронтендом ищется именно так.
Регистр значит не везде одно и то же. Схема и хост регистронезависимы (HTTP://EXAMPLE.COM — тот же адрес), а путь, имена и значения параметров — зависимы: /Users и /users это разные пути.
Фрагмент на сервер не уходит. Всё после # остаётся в браузере и в логах сервера не появится. Отсюда и совет не класть туда ничего чувствительного — впрочем, в query тоже не стоит: он оседает в логах сервера и в истории браузера. А вот про Referer оговорка: при нынешнем умолчании strict-origin-when-cross-origin на чужой сайт уходит только origin, без пути и параметров. Внутри своего сайта — адрес целиком, и вот там query видно.
Частые вопросы
Почему ссылка ломается на пробеле или плюсе?
В query-строке плюс исторически означает пробел, а сам плюс должен быть закодирован как %2B. Разбор покажет, какое значение реально придёт на бэкенд.
Как читать %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82?
Это UTF-8 в percent-encoding. Вставьте ссылку — параметры декодируются в читаемый русский текст.
Что делать с одинаковыми параметрами?
Одно имя может встречаться несколько раз, и языки обрабатывают это по-разному: кто-то берёт первое значение, кто-то последнее, кто-то массив. Разбор показывает все вхождения.