URL缩短器是如何工作的?

112

我想知道URL缩短器的工作原理,比如它们如何从地址栏中提取文本并将其映射到正确的URL,然后再进行重定向。它们使用哪种编程语言?它们如何维护映射历史记录?它们如何确保缩短的URL的唯一性?普通人怎样才能在不访问URL的情况下取消缩短的链接?


36
我也很失望地看到这个问题被关闭了,因为这正是我想问的问题。这个问题不含糊也不缺少信息——他的问题非常具体明确。 - thumbtackthief
8
@bmargulies,我认为这个问题不应该被关闭,因为它非常有帮助,连带的回答也很有用。而且,您决定关闭它,尽管已经有43个赞成票,这是为什么呢? - Amruth A
3个回答

49

维基百科是你的好朋友

基本上,一个使用较短名称的网站被用作占位符,例如bit.ly。

然后,bit.ly为用户生成一个密钥,该密钥是随机生成的以避免重复。 考虑到35个字符选项和8个左右的值,请进行计算。 这是很多可能的密钥。 如果一个URL等于先前存在的密钥,我记得在某个地方读到他们也会重新使用密钥。

他们不会真正使用特定的编程语言,只是使用简单的URL重定向,可以使用HTTP响应状态代码301、302、307或308来完成。


28
重定向并非使用HTML实现,而是通过HTTP头实现的(状态码为301或302,具体取决于情况)。 - Yahel
他们一定是使用了Location头来进行重定向。 - Jeevan Patil

33
URL缩短器只是生成一个短代码,将目标URL映射到短代码,并提供一个新的URL。访问该URL时,会使用短代码作为键执行数据库查找,并将您重定向到目标URL。缩短的URL和目标URL之间没有算法关联,因此您无法在不经过URL缩短器系统的情况下“取消映射”它。
您可以使用任何编程语言和数据存储来完成此操作。确保唯一性的代码生成非常简单;如果您有一个递增的主整数键,则可以将该键简单地编码为base62并提供服务。由于代码是递增的,所以永远不会发生冲突。

21

实际上,这个过程非常简单:有一个脚本要求输入URL,生成一个随机字符串(并验证此字符串是否已被使用),并将两者放入某种数据库中。当您请求URL时,另一个脚本会在数据库中查找随机字符串,如果找到了就重定向您到该网站。

当然,在生产环境中更复杂,需要实现一些必要的功能,例如防止滥用、URL过滤、垃圾邮件预防、URL验证等等。但这些都很容易实现。


语言不是很重要,基本上任何一种都可以。


10
“并验证此字符串尚未被使用”的意思是什么?如何进行验证?这是最大的问题。 - Stewie
4
@Stewie:在你选择的数据库语言中,执行“SELECT * FROM mappings WHERE key = stringToCheck”,并检查是否返回任何行?这似乎是整个问题中最简单的部分了。 - David Liu
@Stewie 或者他们可以使用 HashMap 来映射 <key, url> - roottraveller
1
@DavidLiu 难道不需要不断重新生成和发出查询,直到输出没有结果吗?随着数据大小的增长,检查所需的时间也会增加。在最坏的情况下,您对数据库的查询次数将是n-1,其中n是“字符串”的数量;当您有1亿个字符串时会发生什么? - Stewie
他们不需要向数据库发出额外的SQL查询。数据库字段上可能启用了唯一键。此外,您必须控制密钥的唯一性以加快速度https://zelark.github.io/nano-id-cc/,需要约2天时间,以便具有至少一个冲突的1%概率。 - nomadus
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接