¿Cómo funcionan los servicios de URL cortas?


¿Cómo funcionan servicios como TinyURL o Metamark?
¿Simplemente asocian la pequeña clave de URL con un [virtual?] web page which merely provide an "HTTP redirect" to the original URL? ¿o hay más" magia"?

[texto original] A menudo uso servicios de acortamiento de URL como TinyURL, Metamark y otros, pero cada vez que lo hago, me pregunto cómo funcionan estos servicios. ¿Crean un nuevo archivo que redirigirá a otra página o usan subdominios?

Author: Abel, 2009-10-13

4 answers

No, no usan archivos. Al hacer clic en un enlace como ese, se envía una solicitud HTTP a su servidor con la URL completa, como http://bit.ly/duSk8wK (enlaces a esta pregunta). Leen la parte de la ruta (aquí duSk8wK), que se asigna a su base de datos. En la base de datos, encuentran una descripción (a veces), su nombre (a veces) y la URL real. Luego emiten una redirección, que es una respuesta HTTP 302 y la URL de destino en el encabezado.

Esta redirección directa es importante. Si si se utilizan archivos o primero cargar HTML y luego redirigir, el navegador añadiría TinyUrl al historial, que no es lo que quieres. Además, el sitio al que se redirige verá el referente (el sitio del que proviene originalmente) como el sitio en el que está el enlace TinyUrl (es decir, twitter.com, su propio sitio, donde quiera que esté el enlace). Esto es igual de importante, para que los propietarios del sitio puedan ver de dónde vienen las personas. Esto tampoco funcionaría si se carga una página que redirige.

PS: hay son más tipos de redirección. HTTP 301 significa: redirección permanente. Si eso ocurriera, el navegador no solicitará el bit.ly o TinyUrl sitio más y esos sitios quieren contar los éxitos. Es por eso que se utiliza HTTP 302, que es una redirección temporal. El navegador preguntará TinyUrl.com o bit.ly cada vez de nuevo, lo que hace posible contar las visitas para usted (algunos servicios de url pequeños ofrecen esto).

 201
Author: Abel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-05 18:48:21

Otros han respondido cómo funcionan las redirecciones, pero también debe saber cómo generan sus pequeñas URL. Por error, escucharás que crean un hash de la URL para generar ese código único para la URL acortada. Esto es incorrecto en la mayoría de los casos, no están utilizando un algoritmo de hash (donde potencialmente podría tener colisiones).

La mayoría de los servicios populares de acortamiento de URL simplemente toman el ID en la base de datos de la URL y luego lo convierten en Base 36 [a-z0-9] (mayúsculas y minúsculas) o Base 62 (mayúsculas y minúsculas).

Un ejemplo simplificado de una tabla de base de datos 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

Los marcos web que permiten un enrutamiento flexible hacen que el manejo de la URL entrante sea realmente fácil (Ruby, ASP.NET MVC, etc.).

Por lo tanto, en su servidor web puede tener una acción de ruta que se parece a (pseudo código):

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

Que dirige cualquier solicitud entrante a su servidor que tiene cualquier texto después de su dominio www.mytinyurl.com a su método asociado, RouteUrl. Se proporciona el texto que se pasa después de la barra diagonal en su URL a ese método.

Entonces, digamos que usted solicitó: www.mytinyurl.com/fif

"fif" sería pasado a su método, RouteUrl(Cadena UrlID). RouteUrl entonces convertiría " fif " a su equivalente base10, 20103, y una solicitud de base de datos se hará para redirigir a cualquier URL se almacena bajo el ID 20103 (en este caso, www.digg.com). También aumentaría el número de visitas de Digg en uno antes de redirigir a la URL correcta.

Este es un ejemplo realmente simplificado, pero debería ser capaz de obtener la idea general.

 94
Author: A Salcedo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-13 21:03:02

Como una extensión de @A Salcedo respuesta:

Algunos servicios de acortamiento de url (Tinyarro.ws) vaya a extreme usando Unicode (UTF-8) para codificar caracteres en url acortada, lo que permite una mayor cantidad de sitios web antes de tener que agregar un símbolo adicional. Dado que la mayor parte de UTF-8 se acepta para su uso ((IRI) RFC 3987 manejado por la mayoría de los navegadores ) que salta de 62 sitios por símbolo a ~1,112,064.

Para poner en perspectiva se puede codificar 1.2366863 e + 12 sitios con 2 símbolos (1,112,064*1,112,064) - en noviembre de 2009, se accedió a enlaces acortados en bit.ly 2.1 mil millones de veces ( Alrededor de ese tiempo, bit.ly y TinyURL fueron los servicios de acortamiento de URL más utilizados.) que es ~600 veces menos de lo que puede caber en solo 2 símbolos, por lo que para la duración completa de la existencia de todos los servicios de acortamiento de url debería durar otros 20 años como mínimo hasta agregar el tercer símbolo.

 4
Author: Matas Vaitkevicius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:14

En palabras simples, el acortador de URL mapea una secuencia larga arbitraria de caracteres ( url original, larga y mala ) en una secuencia corta y elegante de caracteres. Esto no es más que Hash, que se usa más comúnmente para crear tablas de búsqueda, HashMap, Hash md5 con fines criptográficos, etc.

Para entender el proceso de acortamiento de URL, he creado un proyecto de demostración en GitHub y también una publicación de blog. Refiérase a esto y hágame saber si fue útil.

Entrada del blog: URL Acortamiento

 1
Author: Anand Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-23 04:33:17