Как работают короткие URL-адреса?

Как такие службы, как TinyURL или Metamark работа?
Они просто связывают крошечный URL-адрес с веб-страницей [virtual?], Которая просто предоставляет "перенаправление HTTP" на исходный URL-адрес? или есть еще "волшебство" к нему?

[оригинальная формулировка] Я часто использую услуги сокращения URL, такие как TinyURL, Metamark и другие, но каждый раз, когда я это делаю, мне интересно, как работают эти службы. Создают ли они новый файл, который будет перенаправляться на другую страницу или использовать субдомены?

Ответ 1

Нет, они не используют файлы. Когда вы нажимаете на такую ​​ссылку, HTTP-запрос отправляется на их сервер с полным URL-адресом, например http://bit.ly/duSk8wK (ссылки на этот вопрос). Они читают часть пути (здесь duSk8wK), которая отображается в их базе данных. В базе данных они находят описание (иногда), ваше имя (иногда) и реальный URL. Затем они выдают перенаправление, которое является ответом HTTP 302 и целевым URL в заголовке.

Это прямое перенаправление важно. Если вы должны использовать файлы или загружать HTML-код сначала, а затем перенаправлять, браузер добавит TinyUrl к истории, которая не является тем, что вы хотите. Кроме того, на сайт, который перенаправлен на сайт, будет отображаться реферер (сайт, из которого вы изначально пришли), как сайт, на котором включена ссылка TinyUrl (т.е. Twitter.com, ваш собственный сайт, где бы ни была ссылка). Это так же важно, чтобы владельцы сайтов могли видеть, откуда идут люди. Это тоже не будет работать, если страница загружается, перенаправляется.

PS: существует больше типов перенаправления. HTTP 301 означает: перенаправить постоянный. Если это произойдет, браузер больше не будет запрашивать сайт bit.ly или TinyUrl, и эти сайты хотят посчитать хиты. Именно поэтому используется HTTP 302, который является временным перенаправлением. Браузер будет запрашивать TinyUrl.com или bit.ly каждый раз снова, что позволяет подсчитывать хиты для вас (некоторые крошечные сервисы URL предлагают это).

Ответ 2

Другие ответили, как работают перенаправления, но вы также должны знать, как они генерируют свои крошечные URL-адреса. Вы ошибочно услышите, что они создают хэш URL-адреса, чтобы создать этот уникальный код для сокращенного URL-адреса. В большинстве случаев это неверно, они не используют алгоритм хеширования (где потенциально могут возникнуть конфликты).

Большинство популярных служб сокращения URL-адресов просто принимают идентификатор в базе данных URL-адреса, а затем преобразуют его в базовую 36 [a-z0-9] (без учета регистра) или Base 62 (с учетом регистра).

Упрощенный пример таблицы базы данных TinyURL:

ID       URL                           VisitCount
 1       www.google.com                        26
 2       www.stackoverflow.com               2048
 3       www.reddit.com                        64
...
 20103   www.digg.com                         201
 20104   www.4chan.com                         20

Веб-платформы, которые позволяют гибкую маршрутизацию, очень легко обрабатывают входящий URL-адрес (Ruby, ASP.NET MVC и т.д.).

Итак, на вашем веб-сервере у вас может быть действие маршрута, похожее на (псевдо-код):

Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);

Что направляет любой входящий запрос на ваш сервер, который имеет любой текст после вашего домена www.mytinyurl.com, связанному с ним методу RouteURL. Он поставляет текст, который передается после прямой косой черты вашего URL-адреса для этого метода.

Итак, скажем, вы просили: www.mytinyurl.com/fif

"fif" будет передан вашему методу RouteURL (String UrlID). Затем RouteURL преобразует "fif" в свой base10 эквивалент, 20103, и запрос базы данных будет сделан для перенаправления на любой URL-адрес, хранящийся под ID 20103 (в данном случае, на www.digg.com). Вы также увеличили бы количество посещений для Digg на один, прежде чем перенаправлять на правильный URL.

Это действительно упрощенный пример, но вы должны иметь возможность получить общую идею.

Ответ 3

Как расширение для ответа @A Salcedo:

Некоторые услуги сокращения URL-адресов (Tinyarro.ws) подходят к использованию с помощью Unicode (UTF-8) для кодирования символов в сокращенном URL-адресе, что позволяет увеличить количество веб-сайтов до добавления дополнительного символа. Поскольку большинство UTF-8 принято для использования ((IRI) RFC 3987, обработанный большинством браузеров), который ударяет с 62 сайтов на символ до ~ 1,112,064.

В перспективе можно кодировать 1.2366863e + 12 сайтов с 2 символами (1,112,064*1,112,064) - в ноябре 2009 года сокращенные ссылки на bit.ly были доступны 2.1 в миллиард раз (Примерно в это же время bit.ly и TinyURL были наиболее широко используемыми службами сокращения URL-адресов.), что в ~ 600 раз меньше, чем вы можете вместить всего 2 символа, поэтому для полного продолжительность существования всех услуг по сокращению URL-адресов должна продолжаться еще минимум 20 лет, пока не будет добавлен третий символ.

Ответ 4

Простыми словами, URL shortener отображает произвольную длинную последовательность символов (оригинальный, длинный дрянной url) в короткую и скользкую последовательность символов. Это не что иное, как Хеширование, которое чаще всего используется для создания таблиц поиска, HashMap, md5 Hash для криптографических целей и т.д.

Чтобы понять процесс сокращения URL-адресов, я создал демонстрационный проект на GitHub, а также запись в блоге. Обратитесь к этому и сообщите мне, было ли это полезно.

Сообщение в блоге: Укорачивание URL