Como funcionam os serviços de URLs curtos?

105

Como funcionam serviços como TinyURL ou Metamark ?
Eles simplesmente associam a pequena chave de URL a uma página da web [virtual?] Que apenas fornece um "redirecionamento HTTP" para a URL original? ou há mais "mágica" nisso?

[redação original] Costumo usar serviços de encurtamento de URL como TinyURL, Metamark e outros, mas sempre que faço isso me pergunto como esses serviços funcionam. Eles criam um novo arquivo que redirecionará para outra página ou usam subdomínios?

Nathan Campos
fonte
1
Para reformular a [não-] pergunta: "Como funcionam serviços como o TinyURL? Eles simplesmente associam a pequena chave de URL a uma página da web [virtual?] Que apenas fornece um" redirecionamento HTTP "para o URL original? É isso que você estão perguntando?
mjv
1
Os urls encurtados alguma vez expiram? (isto é, as entradas da base de dados para os URLs são removidos a partir dos servidores)
thd
2
@thd: sim, mas pode depender de acessos (diários) e da política do provedor de serviços de URL curto. Eles também podem permitir que nunca expire, alguns pedem uma assinatura para isso.
Abel de
Possível duplicata de Como funciona um URL Shortener?
roottraveller

Respostas:

224

Não, eles não usam arquivos. Quando você clica em um link como esse, uma solicitação HTTP é enviada ao servidor com a URL completa, como http://bit.ly/duSk8wK (links para esta questão). Eles lêem a parte do caminho (aqui duSk8wK), que mapeia para seu banco de dados. No banco de dados, eles encontram uma descrição (às vezes), seu nome (às vezes) e a URL real. Em seguida, eles emitem um redirecionamento, que é uma resposta HTTP 302 e o URL de destino no cabeçalho.

Esse redirecionamento direto é importante. Se você fosse usar arquivos ou primeiro carregar HTML e depois redirecionar, o navegador adicionaria TinyUrl ao histórico, o que não é o que você deseja. Além disso, o site para o qual é redirecionado verá o referenciador (o site de onde você veio originalmente) como sendo o site do link do TinyUrl (ou seja, twitter.com, seu próprio site, onde quer que esteja o link). Isso é igualmente importante, para que os proprietários de sites possam ver de onde as pessoas vêm. Isso também não funcionaria se fosse carregada uma página que redireciona.

PS: existem mais tipos de redirecionamento. HTTP 301 significa: redirecionamento permanente. Se isso acontecer, o navegador não solicitará mais o site bit.ly ou TinyUrl e esses sites desejam contar os acessos. É por isso que o HTTP 302 é usado, que é um redirecionamento temporário. O navegador perguntará a TinyUrl.com ou bit.ly a cada vez, o que torna possível contar os acessos para você (alguns pequenos serviços de url oferecem isso).

Abel
fonte
2
Na verdade, acho que o Bit.ly usa HTTP 301 em vez de 302 (a última vez que ouvi)
Kenny Cason
1
Já que bit.ly não permite que você mude para onde um de seus URLs aponta, 301 faz sentido. Não há necessidade de lembrar a versão bit.ly e verificar novamente.
Joost Schuur
11
@KennyCason / @Joost Schuur: é de fato HTTP 301 que é usado, no entanto, com um carimbo de data / hora. Isso o transforma em um Movednão Moved Permanently. Esta é uma diferença sutil. Ao adicionar o carimbo de data / hora, o navegador considera que deve verificar se o recurso foi alterado ou não quando o tempo limite foi atingido. Outros, como is.gd, usam um normal 301 Moved Permanentlye o navegador não precisa verificar novamente (mas geralmente o fará). Por fim, serviços como o url4.eu não redirecionam de forma alguma, mas mostram primeiro um anúncio. Com o 301, os serviços ainda contam com visitantes únicos , mas nem todos os acessos.
Abel de
6
O exemplo de URL bitly agora é real e realmente redireciona de volta para esta questão ;-) Veja bitly.com/duSk8wK+ para a página de informações.
Ronald
1
@Costa: existem várias formas de contar cliques, é possível que ele acompanhe o ID da sua placa de rede, que é uma forma de rastrear se uma solicitação vem do mesmo computador. É possível falsificar ou alterar esse ID, não é à prova de falhas. Além disso, é possível que rastreie ou use cookies de terceiros que foram definidos anteriormente e para o mesmo usuário em navegadores diferentes, que você pode verificar limpando todos os dados da sessão e usando um navegador anônimo.
Abel de
110

Outros responderam como funcionam os redirecionamentos, mas você também deve saber como eles geram seus pequenos urls. Você ouvirá por engano que eles criam um hash do URL para gerar esse código exclusivo para o URL encurtado. Isso é incorreto na maioria dos casos, eles não estão usando um algoritmo de hash (onde você pode potencialmente ter colisões).

A maioria dos serviços de encurtamento de URL populares simplesmente pega o ID no banco de dados do URL e, em seguida, converte-o em Base 36 [a-z0-9] (não diferencia maiúsculas de minúsculas) ou Base 62 (diferencia maiúsculas de minúsculas).

Um exemplo simplificado de uma tabela de banco de dados 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

Frameworks da Web que permitem o roteamento flexível tornam o manuseio de URLs de entrada realmente fácil (Ruby, ASP.NET MVC, etc).

Portanto, em seu servidor da web, você pode ter uma ação de rota semelhante a (pseudo código):

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

Que roteia qualquer solicitação de entrada para o seu servidor que tenha qualquer texto após o seu domínio www.mytinyurl.com para o método associado, RouteURL. Ele fornece o texto que é passado após a barra em seu URL para esse método.

Então, digamos que você solicitou: www.mytinyurl.com/fif

"fif" seria então passado para seu método, RouteURL (String UrlID). RouteURL então converteria "fif" em seu equivalente de base10, 20103, e uma solicitação de banco de dados será feita para redirecionar para qualquer URL armazenado sob a ID 20103 (neste caso, www.digg.com). Você também aumentaria a contagem de visitas do Digg em um antes de redirecionar para o URL correto.

Este é um exemplo realmente simplificado, mas você deve conseguir ter uma ideia geral.

A Salcedo
fonte
12
Obrigado pela bela explicação. Então, o que acontece quando alguém tenta criar um URL curto para um URL longo já existente? Eles realizam uma pesquisa de texto completo no banco de dados? Acho que não, pois vai consumir muito tempo. A abordagem baseada em hash ou resumo de mensagem parece mais prática.
Piyush Kansal,
@PiyushKansal você pode usar o hash internamente para fazer uma O(1)pesquisa e encontrar duplicatas; e então rotear a pequena URL existente para isso, ou pode escolher gerar uma nova. Pelo que eu posso dizer, goo.glreutiliza os pequenos urls para o mesmo URL; experimente isso no seu final para esta página: Você entendeu isso >> goo.gl/8gVb8X?
Kingz
Como eles lidam com os parâmetros de url? Por exemplo www.digg.com?filter=123
Ronen
7

Como uma extensão da resposta @A Salcedo:

Alguns serviços de encurtamento de url (Tinyarro.ws) vão ao extremo usando Unicode (UTF-8) para codificar caracteres em url encurtado - o que permite uma maior quantidade de sites antes de ter que adicionar um símbolo adicional. Como a maior parte do UTF-8 é aceito para uso ( (IRI) RFC 3987 manipulado pela maioria dos navegadores ), isso vai de 62sites por símbolo para ~ 1,112,064.

Para colocar em perspectiva, pode-se codificar 1.2366863e + 12 sites com 2 símbolos ( 1,112,064*1,112,064) - em novembro de 2009, links encurtados bit.lyforam acessados 2.1bilhões de vezes (por volta dessa época, bit.ly e TinyURL eram os serviços de encurtamento de URL mais amplamente usados. ) que é ~ 600 vezes menos do que você pode colocar em apenas 2 símbolos, então para a duração total de todos os serviços de encurtamento de url deve durar mais 20 anos no mínimo até adicionar o terceiro símbolo.

Matas Vaitkevicius
fonte
5

Em palavras simples, o encurtador de URL mapeia uma longa sequência arbitrária de caracteres (original, url longa e ruim) em uma sequência curta e elegante de caracteres. Isso nada mais é do que Hashing, que é mais comumente usado para criar tabelas de pesquisa, HashMap, md5 Hash para fins criptográficos etc.

Para entender o processo de encurtamento de URL, criei um projeto de demonstração no GitHub e também uma postagem no blog. Consulte isso e me diga se foi útil.

Postagem do blog: Redução de URL

Anand Joshi
fonte