Как работают сервисы коротких URL? - PullRequest
96 голосов
/ 13 октября 2009

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

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

Ответы [ 4 ]

214 голосов
/ 13 октября 2009

Нет, они не используют файлы. Когда вы нажимаете на такую ​​ссылку, на их сервер отправляется 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 предлагают это).

101 голосов
/ 14 октября 2009

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

Большинство популярных сервисов сокращения URL-адресов просто принимают идентификатор в базе данных URL-адреса и затем преобразуют его в Base 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-адрес, хранящийся под идентификатором 20103 (в данном случае www.digg.com). Вы также увеличите количество посещений Digg на один, прежде чем перенаправлять на правильный URL.

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

6 голосов
/ 13 июня 2016

В качестве дополнения к ответу @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 миллиардов раз ( В то время, бит .ly и TinyURL были наиболее широко используемыми службами сокращения URL-адресов. ), что примерно в 600 раз меньше, чем можно уместить всего за 2 символа, поэтому для полной продолжительности существования всех служб сокращения URL-адресов это должно продолжаться еще 20 лет. минимум до добавления третьего символа.

1 голос
/ 23 октября 2016

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

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

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

...