Как короткие сервисы URL работают?

Каждый объект интеллектуального указателя содержит общее количество ссылок - по одному на каждый необработанный указатель.

Вы можете взглянуть на эту статью. Эта реализация хранит их в отдельном объекте, который копируется вокруг. Вы также можете взглянуть на документацию boost или на статью Wikipedia об умных указателях.

102
задан Abel 4 April 2012 в 17:09
поделиться

2 ответа

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

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

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

220
ответ дан 24 November 2019 в 04:25
поделиться

Другие ответили, как работают перенаправления, но вы также должны знать, как они генерируют свои крошечные 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.

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

com к связанному с ним методу RouteURL. Он предоставляет этому методу текст, который передается после косой черты в вашем URL-адресе.

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

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

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

com к связанному с ним методу RouteURL. Он предоставляет этому методу текст, который передается после косой черты в вашем URL-адресе.

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

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

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

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

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

106
ответ дан 24 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: