Como funciona um URL Shortener? [fechadas]

87

Gostaria de saber como funciona um URL Shortener, como eles extraem o texto da barra de endereço e mapeiam para corrigir URL, depois redirecionam. Que linguagem de programação eles usam? Como eles mantêm o histórico do mapeamento? Como eles garantem a exclusividade do URL encurtado? Como um leigo pode desfazer o mapeamento sem visitar o URL?

prap19
fonte
65
apenas 3 votos fechados? vamos lá, ele quer aprender alguma coisa, feche mais rápido !!!
IAdaptador de
22
Essa era exatamente a pergunta que eu tinha e estou muito desapontado ao ver que ela está fechada. Não é ambíguo ou incompleto - ele é muito específico no que está perguntando.
thumbtackthief
3
@bmargulies Acho que a questão não deveria ser fechada, isso foi muito útil e até respostas, também acho que 43 votos positivos e você decidiu que seria fechada..por que ??
Amruth A

Respostas:

40

Wiki é seu amigo

Basicamente, um site com um nome mais curto é usado como espaço reservado, como bit.ly.

Em seguida, bit.ly gera uma chave para o usuário fornecer, que é gerada aleatoriamente para não se repetir. Com 35 opções de caracteres e 8 ou mais valores, faça as contas. São muitas chaves possíveis. Se um url é igual a uma chave existente anteriormente, lembro-me de ter lido em algum lugar que eles também reutilizam as chaves.

Eles realmente não usam uma linguagem de programação específica, eles apenas usam um redirecionamento de URL simples, que pode ser feito com HTML, acredito.

Daniel G. Wilson
fonte
oh isso é legal. Muito obrigado
prap19
25
O redirecionamento NÃO é feito com HTML, é feito com cabeçalhos HTTP. (Código de status 301 ou 302, dependendo).
Yahel
Tudo bem, isso faria mais sentido. Obrigado pelo esclarecimento.
Daniel G. Wilson
Eles devem usar o cabeçalho Location para redirecionar.
Jeevan Patil
26

Os abreviadores de URL apenas geram um shortcode, mapeiam o URL de destino para o shortcode e fornecem um novo URL. Visitar o URL executa uma pesquisa no banco de dados com o shortcode como uma chave e o redireciona para o URL de destino. Não há associação algorítmica entre um URL encurtado e um URL de destino, portanto, você não pode "desmapear" sem passar pelos sistemas do encurtador de URL.

Você pode fazer isso com qualquer linguagem de programação e armazenamento de dados. A geração de código também é trivial para garantir a exclusividade; se você tivesse uma chave inteira primária incremental, poderia simplesmente codificar a chave como base62 e servir a ela. Como os códigos são incrementais por natureza, você nunca terá um conflito.

Chris Heald
fonte
19

O processo é bem simples na verdade: há um script que pede a URL, gera uma string aleatória (e verifica se essa string ainda não foi usada) e coloca os dois em algum tipo de banco de dados. Quando você solicita um url, outro script procura no banco de dados pela string aleatória e, se for encontrado, o redireciona para o site.

Obviamente, isso é mais complicado na produção devido aos recursos necessários, como prevenção de abuso, filtragem de URL, prevenção de spam, verificação de URL, etc. Mas esses são muito simples de implementar.


A linguagem é irrelevante, principalmente qualquer um serve.

TheLQ
fonte
9
"e verifica se esta string ainda não foi usada" .. COMO? Esta é a maior questão
Stewie
3
@Stewie: SELECT * FROM mapeamentos WHERE key = stringToCheck e verifique se alguma linha foi retornada? Ou qualquer coisa semelhante em seu idioma de banco de dados de escolha. Para ser honesto, parece a parte mais simples de todo o problema.
David Liu
@Stewie Ou eles podem usar um HashMap para mapear<key, url>
roottraveller
@DavidLiu Não seria necessário continuar gerando e emitindo consultas até que nenhum resultado fosse exibido? À medida que o tamanho dos dados aumenta, a hora de verificar também aumenta. Na pior das hipóteses, o número de consultas ao seu banco de dados será n-1, onde n é o número de "strings"; o que acontece quando você tem cordas de 100M?
Stewie,
@Stewie Essa é uma questão totalmente diferente, um problema com o princípio da própria solução. Você está certo que o problema de regeneração se tornaria um problema eventualmente, mas, novamente, é por isso que eu disse que "verificar se a string ainda não foi usada" é a parte fácil da solução. Existem muitas soluções alternativas para fazer aleatório sem substituição.
David Liu