URL
URL
Введение
URL (Uniform Resource Locator) — это адрес ресурса в интернете. Как почтовый адрес для письма, URL точно указывает, где находится нужная страница или файл. Тестировщик работает с URL каждый день: проверяет переходы, параметры, редиректы и безопасность ссылок.
Структура URL
Полный URL состоит из нескольких частей:
https://shop.example.com:443/products/electronics?sort=price&page=2#reviews
│ │ │ │ │ │
scheme host port path query string fragment
Разбор каждой части
| Часть | Описание | Пример |
|---|---|---|
| scheme | Протокол передачи данных | http, https |
| host | Доменное имя или IP-адрес | shop.example.com |
| port | Номер порта (опционально) | :443, :8080 |
| path | Путь к ресурсу на сервере | /products/electronics |
| query string | Параметры запроса | ?sort=price&page=2 |
| fragment | Якорь на странице (обрабатывается браузером) | #reviews |
Порты по умолчанию: HTTP — 80, HTTPS — 443. Если порт стандартный, его обычно не указывают.
Query String в деталях
Query string начинается с ?, параметры разделяются &:
?sort=price&page=2&category=phones&in_stock=true
sort=price— ключsort, значениеpricepage=2— ключpage, значение2
Для тестировщика: параметры query string — отличное место для поиска уязвимостей и багов.
URL-кодирование
Не все символы допустимы в URL "как есть". Специальные символы кодируются в формате %HEX:
| Символ | Код | Пример |
|---|---|---|
| Пробел | %20 или + | hello%20world |
@ | %40 | user%40mail.com |
# | %23 | title%23section |
& | %26 | a%26b |
| Кириллица | — | %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 |
Пример: URL https://site.com/search?q=красная шапочка в реальности выглядит как:
https://site.com/search?q=%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D0%B0%D1%8F%20%D1%88%D0%B0%D0%BF%D0%BE%D1%87%D0%BA%D0%B0
Тестирование URL
Что нужно проверять
1. Валидные URL:
- Стандартный URL работает корректно
- URL с кириллицей отображается и работает
- URL с параметрами возвращает правильные данные
2. Невалидные URL:
- Несуществующий путь → 404
- Удалённый раздел → редирект или 404
3. Длинные URL:
- Очень длинный query string (браузеры ограничивают до ~2000 символов, серверы — по-разному)
4. Специальные символы:
?id=1 OR 1=1(SQL-инъекция)?redirect=javascript:alert(1)(XSS через redirect)- Двойные слэши в пути:
//admin
5. Регистр букв:
/Productsи/products— это один и тот же URL? (зависит от настройки сервера)- Параметры обычно чувствительны к регистру:
?Sort=price≠?sort=price
Практические кейсы
# Проверить пагинацию:
/articles?page=1 → первая страница (OK)
/articles?page=0 → что вернёт? (граничный кейс)
/articles?page=-1 → ошибка или первая страница?
/articles?page=abc → ошибка валидации?
/articles?page=9999 → пустая страница или 404?
Частые ошибки понимания
- ❌ "Fragment (#section) отправляется на сервер" → нет, fragment обрабатывается только браузером
- ❌ "Параметры в URL всегда безопасны" → параметры могут содержать инъекции, всегда проверяй
- ❌ "HTTP и HTTPS в URL — без разницы" → HTTPS шифрует, данные не передаются открытым текстом
Что мы запомним
- URL = scheme + host + port + path + query string + fragment
- Query string содержит параметры после
?, разделённые& - Специальные символы в URL кодируются: пробел →
%20 - Fragment
#обрабатывается только браузером, на сервер не попадает - Тестируй URL с граничными значениями параметров, специальными символами и очень длинными значениями