web-dev-qa-db-fra.com

Comment fonctionnent les services d'URL courtes?

Comment fonctionnent des 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"?

[formulation originale] 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 sera redirigé vers une autre page ou utilisent-ils des sous-domaines?

99
Nathan Campos

Non, ils n'utilisent pas de fichiers. Lorsque vous cliquez sur un lien comme celui-ci, une demande HTTP est envoyée à leur serveur avec l'URL complète, comme http://bit.ly/duSk8wK (liens vers cette question). Ils lisent la partie du 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 la véritable URL. 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 qui 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 était chargée et redirigeait.

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 hits. 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 services d'url minuscules le proposent).

218
Abel

D'autres ont répondu au fonctionnement des redirections, mais vous devez également savoir comment elles génèrent leurs minuscules URL. Vous entendrez par erreur qu'ils créent un hachage de l'URL afin de générer ce code unique pour l'URL raccourcie. C'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é d'une 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 cadres Web qui permettent un routage flexible rendent la gestion des URL entrantes très facile (Ruby, ASP.NET MVC, etc.).

Ainsi, sur votre serveur Web, vous pourriez avoir une action de routage 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 transmis après la barre oblique dans votre URL à cette méthode.

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

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

Ceci est un exemple vraiment simplifié mais vous devriez pouvoir avoir une idée générale.

105
A Salcedo

En tant qu'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 coder les caractères en URL raccourcie - ce qui permet une plus grande quantité de sites Web avant d'avoir à ajouter un symbole supplémentaire. Étant donné que la plupart des TF-8 est accepté pour utilisation ( (IRI) RFC 3987 géré par la plupart des navigateurs ) qui passe de 62 sites par symbole vers ~ 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, liens raccourcis sur bit.ly ont été consultés 2.1 milliards de fois ( à cette époque, bit.ly et TinyURL étaient les services de raccourcissement d'URL les plus utilisés. ), ce qui est environ 600 fois moins que ce que vous pouvez contenir en seulement 2 symboles, donc durée d'existence de tous les services de raccourcissement d'URL, elle devrait durer encore 20 ans minimum jusqu'à l'ajout du troisième symbole.

7
Matas Vaitkevicius

En termes simples, le raccourcisseur d'URL mappe une longue séquence arbitraire de caractères (l'URL longue et originale) en une séquence de caractères courte et lisse. Ce n'est rien d'autre que Hashing, 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. Référez-vous à cela et faites-moi savoir si cela a été utile.

Article de blog: raccourcissement d'URL

3
Anand Joshi