Службы коротких URL-адресов (например, tinyurl) работают, сохраняя большую таблицу базы данных, которая отображается из коротких URL-адресов в их полную форму.
Когда вы запрашиваете tinyurl, служба выделяет случайный короткий URL-адрес (который в данный момент не используется) и создает в своей таблице запись, которая отображает короткий URL-адрес на предоставленный вами более длинный.
Когда вы пытаетесь загрузить короткий URL-адрес в браузер, запрос сначала направляется в сервис tinyURL, который ищет полный URL-адрес, а затем отправляет HTTP-ответ перенаправления в браузер, сообщая ему перейти на реальный URL-адрес. 1005 *
Вы можете реализовать свою собственную службу сокращения URL-адресов, выполнив то же самое, хотя, если вы сокращаете свои собственные URL-адреса, вы можете выполнить внутреннее перенаправление на ваш веб-сервер; например используя фильтр запроса сервлета.
Я описал выше в контексте сокращения URL-адресов таким образом, что позволяет разрешать URL-адреса 1 . Но этот подход также может быть использован более широко; то есть путем создания пары Map<String,String>
объектов и заполнения ее двунаправленными сопоставлениями между последовательно генерируемыми короткими строками и исходными (возможно, более длинными) строками. Можно доказать , что даст меньший средний размер короткой строки, чем любая алгоритмическая схема сжатия или кодирования для того же набора длинных строк.
Недостатком является пространство, необходимое для хранения сопоставлений, и тот факт, что вам нужны сопоставления в любом месте (например, на любом компьютере), где вам нужно выполнять преобразование между коротким и длинным или длинным в короткое.
1 - Когда вы думаете об этом, это важно. Если вы укоротите строку URL-адреса, и результат больше не будет разрешаться, то в большинстве случаев он не будет полезен.