¿Cómo funciona un acortador de URL? [cerrado]

87

Me pregunto cómo funciona un acortador de URL, por ejemplo, cómo extraen el texto de la barra de direcciones y lo asignan a la URL correcta, y luego lo redireccionan. ¿Qué lenguaje de programación utilizan? ¿Cómo mantienen la historia del mapeo? ¿Cómo garantizan la singularidad de la URL abreviada? ¿Cómo puede un lego desasignarlo sin visitar la URL?

prap19
fuente
65
solo 3 votos cerrados? vamos, quiere aprender algo, ciérralo más rápido !!!
IAdapter
22
Esta era la pregunta exacta que tenía y estoy muy decepcionada de ver que está cerrada. No es ambiguo ni incompleto, es muy específico en lo que pregunta.
ladrón de chinchetas
3
@bmargulies Creo que la pregunta no debe cerrarse, esto fue muy útil e incluso responde, también pienso en 43 votos a favor y decidiste que se cerrara ...
Amruth A

Respuestas:

40

Wiki es tu amigo

Básicamente, un sitio web con un nombre más corto se utiliza como marcador de posición, como bit.ly.

Luego, bit.ly genera una clave para que la proporcione el usuario, que se genera aleatoriamente para que no se repita. Con 35 opciones de caracteres y aproximadamente 8 valores, haz los cálculos. Son muchas claves posibles. Si una URL es igual a una clave existente anteriormente, recuerdo haber leído en algún lugar que también reutilizan claves.

Realmente no usan un lenguaje de programación específico, solo usan una simple redirección de URL, que creo que se puede hacer con HTML.

Daniel G. Wilson
fuente
oh eso es genial. Muchas gracias
prap19
25
La redirección NO se realiza con HTML, se realiza con encabezados HTTP. (Código de estado 301 o 302, según).
Yahel
Ah, está bien, eso tendría más sentido. Gracias por la aclaración.
Daniel G. Wilson
Deben usar el encabezado de ubicación para redirigir.
Jeevan Patil
26

Los abreviadores de URL solo generan un código corto, asignan la URL de destino al código corto y proporcionan una nueva URL. Visitar la URL realiza una búsqueda en la base de datos con el código corto como clave y lo redirige a la URL de destino. No existe una asociación algorítmica entre una URL acortada y una URL de destino, por lo que no puede "desasignarla" sin pasar por los sistemas del acortador de URL.

Puede hacerlo con cualquier lenguaje de programación y almacén de datos. La generación de código también es trivial para garantizar la singularidad; si tuvieras una clave entera primaria incremental, simplemente podrías codificar la clave como base62 y servirla. Dado que los códigos son de naturaleza incremental, nunca tendrá un conflicto.

Chris Heald
fuente
19

En realidad, el proceso es bastante simple: hay un script que solicita la URL, genera una cadena aleatoria (y verifica que esta cadena no se haya utilizado todavía) y coloca las dos en algún tipo de base de datos. Cuando solicita una URL, otro script busca en la base de datos la cadena aleatoria y, si se encuentra, lo redirige al sitio.

Por supuesto, esto es más complicado en la producción debido a características necesarias como prevención de abuso, filtrado de URL, prevención de spam, verificación de URL, etc. Pero son bastante simples de implementar.


El idioma es irrelevante, casi todos lo harán.

TheLQ
fuente
9
"y verifica que esta cadena no se haya utilizado" ... ¿CÓMO? Esta es la pregunta más importante
Stewie
3
@Stewie: SELECT * FROM mappings WHERE key = stringToCheck, y compruebe si se han devuelto filas. O cualquier cosa similar en el idioma de su base de datos que elija. Para ser honesto, parece la parte más simple de todo el problema.
David Liu
@Stewie O pueden usar un HashMap para mapear<key, url>
roottraveller
@DavidLiu ¿No sería necesario seguir regenerando y emitiendo consultas hasta que no arroje resultados? A medida que aumenta el tamaño de sus datos, aumenta el tiempo de verificación. En el peor de los casos, el número de consultas a su base de datos será n-1, donde n es el número de "cadenas"; ¿Qué pasa cuando tienes 100 millones de cadenas?
Stewie
@Stewie Esa es una pregunta completamente diferente, un problema con el principio de la solución en sí. Tiene razón en que el problema de regeneración se convertiría en un problema eventualmente, pero nuevamente, es por eso que dije que "verificar que la cadena no se haya usado ya" es la parte fácil de la solución. Hay muchas soluciones alternativas para hacer al azar sin reemplazo.
David Liu