URL-адреса и строки запроса
URL-адреса и строки запроса
Слой URL реализует парсинг в стиле WHATWG — то же поведение, которое применяют браузеры — поэтому URL, извлечённые из документов, разрешаются и нормализуются так, как они бы делались в реальном пользовательском агенте.
Разбор и проверка
URL.parse() разбирает абсолютный или относительный URL; URL.can_parse() отвечает на вопрос о валидности без создания объекта. Ошибки разбора вызывают типизированный URLParseError.
Строки запроса
URLSearchParams читает и изменяет параметры запроса: append(), get(), get_all(), has() и delete() охватывают полный цикл, сохраняя семантику множественных значений.
Советы и лучшие практики
- Используйте
can_parse()для простой валидации в фильтрах; создавайте с помощьюparse()только когда нужны компоненты - Помните, что ключи запроса могут повторяться — используйте
get_all(), когда параметр может встречаться более одного раза - Отлавливайте
URLParseError, а не делайте предварительную проверку с помощью регулярных выражений
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Относительный URL не удаётся разобрать | Не указан базовый путь | Укажите базу согласно URL.parse() |
| Возвращается только первое значение параметра запроса | Использовано get() для повторяющегося ключа | Использовать get_all() |
| Необычные символы в компонентах | Нормализация WHATWG в действии | Ожидается — это соответствует поведению браузера |
FAQ
Следует ли разбор стандарту WHATWG?
Да — нормализация и разбиение компонентов отражают поведение браузера.
Как проверить URL без его разбора?
URL.can_parse() возвращает валидность без создания объекта.
Могу ли я отредактировать строку запроса на месте?
Да — URLSearchParams поддерживает круговые операции append/get/has/delete.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
URL.parse | Разобрать URL |
URL.can_parse | Проверка корректности без построения |
URLSearchParams.append | Добавить параметр запроса |
URLSearchParams.get_all | Все значения для ключа |
URLParseError | Ошибка типизированного разбора |