Comment fonctionnent les services d'URL courtes?

105

Comment fonctionnent les services comme TinyURL ou Metamark ?
Associent-ils simplement la minuscule clé URL à une page Web [virtuelle?] Qui fournit simplement une "redirection HTTP" vers l'URL d'origine? ou y a-t-il plus de «magie»?

[libellé original] J'utilise souvent des services de raccourcissement d'URL comme TinyURL, Metamark et autres, mais chaque fois que je le fais, je me demande comment ces services fonctionnent. Créent-ils un nouveau fichier qui redirigera vers une autre page ou utilisent-ils des sous-domaines?

Nathan Campos
la source
1
Pour reformuler la question [non-]: "Comment fonctionnent les services comme TinyURL? Associent-ils simplement la minuscule clé URL à une page Web [virtuelle?] Qui fournit simplement une" redirection HTTP "vers l'URL d'origine? C'est ce que vous demandent?
mjv
1
Les URL raccourcies expirent-elles un jour? ( à savoir les entrées de la base de données pour ces URL sont supprimés des serveurs)
thd
2
@thd: oui, mais cela peut dépendre des appels (quotidiens) et de la politique du fournisseur de services d'URL courtes. Ils peuvent également autoriser la non-expiration, certains demandent une adhésion pour cela.
Abel
Double possible de Comment fonctionne un raccourcisseur d'URL?
roottraveller du

Réponses:

224

Non, ils n'utilisent pas de fichiers. Lorsque vous cliquez sur un lien comme celui-ci, une requête HTTP est envoyée à leur serveur avec l'URL complète, comme http://bit.ly/duSk8wK (liens vers cette question). Ils lisent la partie chemin (ici duSk8wK), qui correspond à leur base de données. Dans la base de données, ils trouvent une description (parfois), votre nom (parfois) et l'URL réelle. Ensuite, ils émettent une redirection, qui est une réponse HTTP 302 et l'URL cible dans l'en-tête.

Cette redirection directe est importante. Si vous deviez utiliser des fichiers ou charger d'abord du HTML, puis rediriger, le navigateur ajouterait TinyUrl à l'historique, ce qui n'est pas ce que vous voulez. De plus, le site vers lequel est redirigé verra le référent (le site dont vous venez à l'origine) comme étant le site sur lequel se trouve le lien TinyUrl (c'est-à-dire, twitter.com, votre propre site, où que se trouve le lien). Ceci est tout aussi important, afin que les propriétaires de sites puissent voir d'où viennent les gens. Cela aussi, ne fonctionnerait pas si une page est chargée qui redirige.

PS: il existe plus de types de redirection. HTTP 301 signifie: redirection permanente. Si cela se produit, le navigateur ne demandera plus le site bit.ly ou TinyUrl et ces sites veulent compter les visites. C'est pourquoi HTTP 302 est utilisé, qui est une redirection temporaire. Le navigateur demandera à nouveau à TinyUrl.com ou bit.ly, ce qui permet de compter les hits pour vous (certains petits services d'URL offrent cela).

Abel
la source
2
En fait, je pense que Bit.ly utilise HTTP 301 au lieu de 302 (le dernier que j'ai entendu)
Kenny Cason
1
Étant donné que bit.ly ne vous permettra pas de changer l'endroit où pointe l'une de leurs URL, 301 a du sens. Pas besoin de se souvenir de la version bit.ly et de la revérifier.
Joost Schuur
11
@KennyCason / @Joost Schuur: c'est bien HTTP 301 qui est cependant utilisé avec un horodatage. Cela en fait un Movednon Moved Permanently. C'est une différence subtile. En ajoutant l'horodatage, le navigateur considère qu'il doit vérifier si la ressource est modifiée ou non lorsque ce délai est atteint. D'autres, comme is.gd, utilisent une norme 301 Moved Permanentlyet le navigateur n'a pas besoin de revérifier (mais le fera souvent). Enfin, des services comme url4.eu ne redirigent pas du tout, mais vous montrent d'abord une publicité. Avec le 301, les services peuvent toujours compter les visiteurs uniques , mais pas tous les appels.
Abel
6
L'exemple d'URL bitly est maintenant réel et redirige en fait vers cette question ;-) Voir bitly.com/duSk8wK+ pour la page d'informations.
Ronald
1
@Costa: il existe de nombreuses façons de compter les clics, il est possible qu'il garde la trace de votre identifiant de carte réseau, qui est un moyen de savoir si une demande provient du même ordinateur. Il est possible de truquer ou de changer cet identifiant, ce n'est pas infaillible. En outre, il est possible qu'il suit ou utilise des cookies tiers qui ont été définis précédemment et pour le même utilisateur sur différents navigateurs, que vous pouvez vérifier en effaçant toutes les données de session et en utilisant un navigateur anonyme.
Abel
110

D'autres ont répondu au fonctionnement des redirections, mais vous devez également savoir comment elles génèrent leurs minuscules URL. Vous entendrez à tort qu'ils créent un hachage de l'URL afin de générer ce code unique pour l'URL raccourcie. Ceci est incorrect dans la plupart des cas, ils n'utilisent pas d'algorithme de hachage (où vous pourriez potentiellement avoir des collisions).

La plupart des services de raccourcissement d'URL populaires prennent simplement l'ID dans la base de données de l'URL, puis le convertissent en Base 36 [a-z0-9] (insensible à la casse) ou en Base 62 (sensible à la casse).

Un exemple simplifié de table de base de données 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

Les frameworks Web qui permettent un routage flexible facilitent la gestion des URL entrantes (Ruby, ASP.NET MVC, etc.).

Ainsi, sur votre serveur Web, vous pouvez avoir une action d'itinéraire qui ressemble à (pseudo code):

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

Qui achemine toute demande entrante vers votre serveur contenant du texte après votre domaine www.mytinyurl.com vers votre méthode associée, RouteURL. Il fournit le texte qui est passé après la barre oblique dans votre URL à cette méthode.

Alors, disons que vous avez demandé: www.mytinyurl.com/fif

"fif" serait alors passé à votre méthode, RouteURL (String UrlID). RouteURL convertirait alors "fif" en son équivalent base10, 20103, et une requête de base de données sera faite pour rediriger vers n'importe quelle URL stockée sous l'ID 20103 (dans ce cas, www.digg.com). Vous augmenteriez également le nombre de visites pour Digg de un avant de rediriger vers l'URL correcte.

C'est un exemple vraiment simplifié, mais vous devriez pouvoir vous faire une idée générale.

Un Salcedo
la source
12
Merci pour la belle explication. Alors, que se passe-t-il lorsque quelqu'un essaie de créer une URL courte pour une URL longue déjà existante? Effectuent-ils une recherche en texte intégral dans la base de données? Je ne pense pas car cela prendra trop de temps. L'approche basée sur le hachage ou le résumé de message semble plus pratique.
Piyush Kansal
@PiyushKansal vous pouvez utiliser le hachage en interne pour faire une O(1)recherche pour trouver les doublons; puis acheminez l'URL minuscule existante pour cela, ou vous pouvez choisir d'en générer une nouvelle. Autant que je sache, goo.glréutilise les minuscules URL pour la même URL; essayez ceci de votre côté pour cette page: obtenez-vous ceci >> goo.gl/8gVb8X?
Kingz
Comment gèrent-ils les paramètres d'URL? Par exemple www.digg.com?filter=123
Ronen
7

Comme extension de la réponse @A Salcedo:

Certains services de raccourcissement d'url (Tinyarro.ws) vont à l'extrême en utilisant Unicode (UTF-8) pour encoder des caractères dans une URL raccourcie - ce qui permet un plus grand nombre de sites Web avant d'avoir à ajouter un symbole supplémentaire. Étant donné que la plupart des UTF-8 sont acceptés pour une utilisation ( (IRI) RFC 3987 gérée par la plupart des navigateurs ), cela passe des 62sites par symbole à ~ 1,112,064.

Pour mettre en perspective, on peut encoder 1.2366863e + 12 sites avec 2 symboles ( 1,112,064*1,112,064) - en novembre 2009, des liens raccourcis sur bit.lyont été consultés des 2.1milliards de fois (à cette époque, bit.ly et TinyURL étaient les services de raccourcissement d'URL les plus utilisés. ) ce qui est ~ 600 fois moins que ce que vous pouvez insérer dans seulement 2 symboles, donc pendant toute la durée d'existence de tous les services de raccourcissement d'url, cela devrait durer encore 20 ans au minimum jusqu'à l'ajout du troisième symbole.

Matas Vaitkevicius
la source
5

En termes simples, le raccourcisseur d'URL mappe une longue séquence arbitraire de caractères (URL originale, longue et merdique) en une séquence courte et lisse de caractères. Ce n'est rien d'autre que du hachage, qui est le plus couramment utilisé pour créer des tables de recherche, HashMap, md5 Hash à des fins cryptographiques, etc.

Pour comprendre le processus de raccourcissement d'URL, j'ai créé un projet de démonstration sur GitHub ainsi qu'un article de blog. Reportez-vous à ceci et faites-moi savoir si cela a été utile.

Article de blog: Raccourcissement d'URL

Anand Joshi
la source