Короткое обозначение является ключом
Представьте таблицу из двух столбцов. В первом записаны условные ключи А17 и Б42, во втором названия двух вымышленных страниц. По ключу сервис находит нужную запись. Длина исходного адреса при этом не обязана определять длину ключа. Главное требование заключается в однозначности: один действующий ключ не должен случайно указывать на две разные записи. Способ создания ключей может различаться. Если используется случайное значение, всё равно нужна проверка занятости. Случайность сама по себе не гарантирует отсутствия совпадений.
Браузер выполняет дополнительный переход
Сначала запрос приходит на сервер коротких ссылок. Сервер ищет соответствие и возвращает ответ перенаправления с адресом назначения в заголовке Location. Затем браузер обращается к этому адресу. Таким образом, в обычной схеме появляется дополнительный шаг и зависимость от посредника. В HTTP существуют постоянные и временные перенаправления, предназначенные для разных задач. Если назначение предполагается изменять, поведение перенаправления и кэширования необходимо продумать отдельно. Нельзя считать, что любая замена строки в таблице немедленно одинаково отразится у всех посетителей.
Разберите разные причины отказа
Ссылка может не работать, потому что ключ неизвестен, срок записи истёк, сервис недоступен или конечная страница удалена. Эти ситуации происходят на разных этапах. Если посредник нашёл запись и отправил браузер дальше, последующая ошибка назначения не означает ошибку поиска ключа. В учебном проекте полезно заранее определить поведение для отсутствующей и отключённой записи. Например, показать понятное сообщение вместо бесконечного перенаправления. Также нужно избегать цепочек, которые возвращают посетителя к исходной короткой ссылке и создают цикл.
Удобство не равно защите доступа
Непонятный короткий ключ не является надёжной заменой авторизации. Если документ закрытый, его права доступа должны проверяться на стороне самого документа. Сокращение также скрывает от получателя часть сведений о конечном адресе, поэтому знакомое название посредника не подтверждает безопасность назначения. При проектировании сервиса важно проверять допустимость адресов и не принимать произвольную строку как доверенную команду перехода. Не следует отправлять в чужой сокращатель секретные ссылки, содержащие ключи доступа: исходный адрес становится известен этому сервису.
Попробуйте на практике
Смоделируйте работу сокращателя на бумаге, используя только вымышленные обозначения страниц.
- Создайте таблицу с ключами А17, Б42 и В08. Назначьте им страницы Расписание, Каталог и Архив.
- Добавьте состояние записи: первые две активны, третья отключена. Опишите, что должен увидеть посетитель для каждого состояния.
- Проследите запрос по ключу Б42: поиск записи, получение назначения и отдельное обращение к странице Каталог.
- Придумайте два сбоя: неизвестный ключ и недоступная страница назначения. Укажите, на каком этапе возникает каждый.
- Попробуйте назначить ключ А17 ещё одной странице. Запишите правило, которое предотвратит неоднозначность, не меняя прежнюю запись случайно.
Как проверить результат. Вы различаете ключ, запись и конечную страницу. Отключённое назначение, неизвестный ключ и ошибка конечного сайта не смешаны, а повтор ключа обнаруживается до использования.
Частые вопросы
Можно восстановить длинный адрес только по символам короткого?
В обычной схеме с таблицей соответствий для этого нужна запись сервиса. Короткое обозначение служит ключом, а не обязательно содержит обратимо закодированный исходный адрес.
QR-код и короткая ссылка являются одним и тем же?
Нет. QR-код является способом представить данные для считывания. В него можно поместить короткий или полный адрес; дальнейший переход зависит от того, какие данные были закодированы.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.