Elido
8 мин чтенияВозможности

Истечение срока ссылки и самоуничтожающиеся ссылки: объяснение

Что делают истечение срока ссылки и самоуничтожающиеся ссылки, когда использовать правила по дате, количеству кликов и однократному использованию, и что возвращает пограничный сервер в момент истечения срока

Marius Voß
DevRel · edge infra
Короткая ссылка с обратным отсчётом, переключающаяся из активного состояния в истёкшее, с возвратом 410 Gone от пограничного сервера

Истечение срока ссылки - это правило, которое автоматически деактивирует короткую ссылку после выполнения условия, так что URL перестаёт работать в момент, который вы выбираете, а не живёт вечно. Самоуничтожающаяся ссылка - та же идея, настроенная на однократное использование: умирает после первого клика. Оба механизма намеренны. Вы не исправляете сломанную ссылку, вы создаёте ту, которая должна остановиться.

Это намерение - главное различие, которое стоит сохранить в голове. Ссылка, которая ломается из-за исчезновения адреса назначения, «сгнила», и гниение - это проблема, которую нужно обнаружить и исправить. Операционный регламент для этого мы описали в статье стратегия предотвращения гниения ссылок. Истечение срока - противоположный шаг: именно вы решаете, что ссылка должна стать недоступной в определённую дату, после N кликов или ровно после одного. В этом посте рассматривается, когда подходит каждый режим, что пограничный сервер возвращает при обращении к истёкшей ссылке, как истечение срока сочетается с паролевыми шлюзами и правилами геотаргетинга, и оговорки по тайминговой точности, которые дают о себе знать, если вы относитесь к одноразовой ссылке как к жёсткой границе безопасности.

Когда к этому прибегают? Предложения с ограниченным сроком, которые не должны продолжать конвертировать после окончания промо-периода. Временный доступ к общему документу или экспорту данных. Одноразовые ссылки для учётных данных или конфиденциального файла. Соответствие принципу минимизации данных, при котором ссылка, предоставляющая доступ, не должна переживать причину своего создания. Ссылки для мероприятий, которые должны умереть на следующий день после события, чтобы устаревший QR-код на плакате не отправлял людей к расписанию прошлого года.

Три режима истечения срока ссылки#

Истечение срока бывает трёх видов, и выбор правильного - это большая часть решения.

Первый - по дате и времени. Вы задаёте временную метку истечения, желательно с указанием часового пояса, и ссылка разрешается в обычном режиме до этого момента, а затем останавливается. Это истекающий URL, который большинство людей имеют в виду: временная ссылка для кампании, заканчивающейся в полночь; ссылка для доступа к документу, которая должна закрыться в конце спринта; ссылка с ограниченным сроком для повтора вебинара, который вы хотите держать открытым только неделю.

Второй - по количеству кликов. Ссылка работает для первых N запросов, затем истекает. Установите N = 100, и сто первый посетитель получит ответ об истечении срока. Это полезно для ограниченных раздач, бета-приглашений с фиксированным числом мест или любого случая, когда лимит - «сколько людей воспользовалось» а не «какой день».

Третий - однократное использование, то есть лимит кликов с N = 1. Это самоуничтожающаяся ссылка. Открывается один раз и мертва при каждом последующем клике. Пересланные копии бесполезны, скриншоты URL бесполезны, а утечка ссылки в лог уже использована, если предполагаемый получатель открыл её первым.

Три режима истечения срока рядом: по дате и времени с дедлайном в календаре, по количеству кликов с показом N использований затем стоп, и однократное использование с одним допустимым кликом до гибели ссылки

Режимы не являются взаимоисключающими в принципе, хотя на практике обычно нужно одно чёткое правило для ссылки. Ссылка, истекающая по дате и по количеству кликов, вполне допустима, но будьте явными в отношении того, какое условие вы ожидаете сработает первым, потому что ответ меняет то, как вы рассуждаете о сроке жизни ссылки. Если вы не можете одним предложением объяснить, почему данная ссылка истекает, вы, вероятно, выбрали не тот режим.

Что делает пограничный сервер при обращении к истёкшей ссылке#

Активная короткая ссылка отвечает редиректом 302 к адресу назначения. Истёкшая должна ответить чем-то терминальным, и выбор кода состояния не косметический.

Наиболее корректный ответ - 410 Gone. Согласно RFC 9110, спецификации HTTP-семантики, 410 означает, что ресурс намеренно и постоянно недоступен, и у сервера нет адреса пересылки. Именно это и представляет истёкшая ссылка. Справочник MDN по 410 Gone указывает, что в отличие от 404, 410 является намеренным сигналом того, что ресурс существовал и теперь ушёл окончательно, - это подсказка, которую поисковые роботы учитывают, быстрее удаляя URL из своего индекса. Для истёкшей ссылки кампании, которую нужно, чтобы поисковики забыли, 410 - честный код.

Иногда вы предпочитаете не признавать, что ссылка вообще когда-либо существовала. 404 Not Found - это правильный выбор в таком случае. Он трактует истёкший слаг как будто он никогда не был реальной ссылкой, что является более деликатной позицией для одноразовых ссылок на конфиденциальные материалы, где даже подтверждение того, что URL когда-то был действительным, что-то раскрывает. Оба - 404 и 410 - являются допустимыми терминальными ответами; разница в том, что вы готовы раскрыть.

На брендированном домене у вас есть третий вариант, более удобный для людей: брендированная страница истечения срока. Вместо голого кода состояния пограничный сервер выдаёт небольшую HTML-страницу, которая сообщает, что ссылка закрыта, и, в идеале, указывает на актуальную альтернативу. Это правильный выбор для маркетинговых ссылок, на которые реальный человек может кликнуть несколько недель спустя с печатного материала или из старого письма. 410-с-телом по-прежнему соответствует стандартам: вы можете вернуть статус 410 и выдать пояснительную страницу в том же ответе. Причина, по которой это особенно важно на кастомном домене, в том, что страница истечения срока несёт ваш бренд, а не общую ошибку, что смягчает тупик.

Схема решений пограничного сервера: активная ссылка возвращает 302 к адресу назначения, тогда как та же ссылка после истечения срока возвращает 410 Gone или брендированную страницу истечения

Решение принимается в том же переходе, который иначе выполнял бы редирект, - это тот же архитектурный принцип, что мы упоминали в статье об умных ссылках: самое дешёвое место для принятия решения о маршрутизации или шлюзовании - это процесс, который уже пишет ответ. Истечение срока - просто ещё одна проверка в этом пути, оцениваемая до построения редиректа. Истёкшая ссылка обходится пограничному серверу дополнительным сравнением, а не дополнительным вызовом сервиса.

Случаи использования по аудитории#

Разные команды обращаются к истечению срока по разным причинам, и подходящий режим следует из этой причины.

Маркетинговым командам чаще всего нужно истечение по дате. Ссылка на распродажу, которая продолжает конвертировать после её окончания, - это ожидающий тикет в поддержку, потому что цена на целевой странице больше не соответствует предложению в ссылке. Установка истечения, совпадающего с окном кампании, делает ссылку честной. Более дружелюбный паттерн, чем жёсткий 410, - истечь активного предложения и переориентировать слаг на страницу «это предложение закончилось, вот актуальное» - это закатный манёвр из регламента по гниению ссылок, применённый намеренно. Для более широкого инструментария кампаний Elido для маркетологов охватывает, как истечение срока сочетается с шаблонами UTM и отслеживанием конверсий.

Юридические команды и отделы по соответствию требованиям заботятся о минимизации данных. Принцип минимизации данных GDPR в статье 5(1)(c) гласит, что персональные данные должны быть ограничены тем, что необходимо для цели. Ссылка, предоставляющая доступ к персональным данным, не должна переживать эту цель. Если ссылка существует только для того, чтобы позволить подрядчику вытянуть отчёт в этом квартале, истечение в конце квартала - это выражение на уровне ссылки того же принципа, который ваша политика хранения уже устанавливает для самих данных. Elido для соответствия требованиям и наша страница доверия раскрывают аспекты резидентности и аудита.

Команды, передающие конфиденциальные файлы, опираются на лимит кликов и однократное использование. Передача учётных данных, разовый экспорт данных, документ под NDA для единственного рецензента: ссылка должна открыться один раз, для одного человека, а затем стать инертной. Сочетайте это с паролевым шлюзом - и у вас два независимых фактора, к которым мы переходим далее.

Как истечение срока сочетается с паролевыми шлюзами и правилами геотаргетинга#

Истечение срока - это шлюз, а не адрес назначения, и шлюзы накапливаются.

Пограничный сервер сначала оценивает срок. Истёкшая ссылка никогда не достигает паролевого запроса и не выполняет правила геотаргетинга или устройства, потому что перенаправлять некуда. Этот порядок намеренен: он означает, что утечка одноразовой ссылки, которая уже была использована, не может даже быть проверена на наличие пароля, поскольку ответ об истечении возвращается прежде, чем срабатывает какая-либо из этих логик.

Для конфиденциальных передач истечение срока и пароль - взаимодополняющие механизмы. Пароль - это «докажите, что вам разрешено»; истечение срока - «и только в этом окне, или только один раз». Каждый в отдельности слабее обоих вместе. Одноразовая ссылка с дополнительной защитой паролем мертва после единственного успешного открытия и бесполезна для тех, кто перехватит её постфактум. Мы рассматриваем сам шлюз в статье короткие ссылки с защитой паролем.

Правила геотаргетинга сочетаются аналогично. Ссылка с геотаргетингом, которая также ограничена по времени, будет маршрутизироваться по стране, пока активна, и возвращать ответ об истечении срока после закрытия окна, при этом проверка страны никогда не выполняется после истечения. Мысленная модель - короткий стек шлюзов, через которые запрос проходит по порядку, и истечение срока стоит в начале этого стека. Здесь нет ничего особенного; это получается само собой при оценке самой дешёвой, наиболее решающей проверки первой.

Как настроить#

Практический процесс одинаков независимо от режима. Вы создаёте или редактируете короткую ссылку, выбираете правило истечения срока и решаете, что должно возвращаться при обращении к истёкшей ссылке.

Для даты установите временную метку истечения и подтвердите часовой пояс. Ссылка, настроенная истечь в «полночь» без часового пояса, неоднозначна для разных регионов, и эта неоднозначность - именно тот вид ошибки «на день», который всплывает в тикетах поддержки. Используйте явный часовой пояс IANA, например Europe/Berlin, чтобы «конец дня кампании» означал одно и то же для всех.

Для лимита кликов установите ограничение и решите, нужен ли строгий подсчёт. Для одноразовой ссылки установите лимит в один. Выбирайте ответ об истечении для каждой ссылки: 410 Gone для ссылок, о которых вы хотите, чтобы поисковые роботы забыли; 404 для деликатности; или брендированная страница истечения на кастомном домене для маркетинговых ссылок, адресованных людям. Руководство по умным ссылкам описывает поля правил, а страница тарифов охватывает, какие возможности истечения срока находятся на каком уровне.

Заметка о честности в отношении тайминга, потому что здесь истечение срока часто переоценивают. Правила по дате и количеству кликов оцениваются во время запроса относительно записи ссылки, поэтому истечение по дате вступает в силу в настроенный момент. Принудительное истечение, когда вы вручную отключаете ссылку, должно распространиться по кэшам пограничных серверов так же, как и любое редактирование ссылки. Это примерно секунда в нормальных условиях, с коротким TTL кэша в качестве верхней границы - та же модель распространения, которую мы задокументировали в статье стратегия кэширования для URL-редиректов. Для лимитов по кликам очень высокий параллельный трафик из разных регионов может допустить небольшое количество лишних кликов до стабилизации распределённого счётчика. Для лимита кампании в 1000 - это шум. Для одноразовой ссылки, которую вы рассматриваете как жёсткую границу безопасности, не полагайтесь только на счётчик: добавьте пароль или проверку на стороне сервера у адреса назначения, потому что «ровно один раз, гарантированно, при состязательном параллелизме» - это свойство, которое адрес назначения лучше подходит для обеспечения, чем переход редиректа. Истечение срока на пограничном уровне - это сильный контроль, а не криптографическая гарантия, и честность в этом - разница между функцией и источником ответственности.

Используемое для того, в чём оно хорошо, истечение срока - одно из самых дешёвых снижений рисков в арсенале инструментов для ссылок. Ссылка кампании, которая не сможет вас поставить в неловкое положение после распродажи; документ с самозакрывающимся доступом; ссылка на учётные данные, которая использована при первом открытии: каждая из них устраняет класс проблем до того, как они могут произойти. Для более широкого вопроса о том, безопасно ли вообще раздавать короткие ссылки, - статья безопасны ли сокращатели URL является дополнительным чтением.

Читайте также в блоге#

Попробуйте Elido

URL-сокращатель с хостингом в ЕС: собственные домены, глубокая аналитика, открытый API. Бесплатный тариф - без банковской карты.

Теги
link expiration
self destructing link
expiring url
temporary link
one time link
link expiry date

Читать дальше