网址缩短器如何工作? [关闭]
Posted
技术标签:
【中文标题】网址缩短器如何工作? [关闭]【英文标题】:How does a URL Shortener work? [closed] 【发布时间】:2011-06-02 03:29:11 【问题描述】:我想知道 URL Shortener 是如何工作的,例如他们如何从地址栏中提取文本并将其映射到正确的 URL,然后将其重定向。他们使用什么编程语言?他们如何维护映射的历史?他们如何确保缩短网址的唯一性?外行如何在不访问 URL 的情况下取消映射?
【问题讨论】:
只有 3 票接近?来吧,他想学点东西,快点关闭吧!!! 这是我的确切问题,我很失望地看到它已关闭。这不是模棱两可或不完整的——他的要求非常具体。 @bmargulies 我认为问题不应该被关闭,这非常有帮助,甚至可以回答,还想 43 次投票,你决定关闭它..为什么?? 【参考方案1】:Wiki Is Your Friend
基本上,名称较短的网站用作占位符,例如 bit.ly。
然后,bit.ly 生成一个密钥供用户提供,该密钥是随机生成的,不会重复。使用 35 个字符选项和 8 个左右的值,计算一下。这是很多可能的键。如果 URL 等于以前存在的密钥,我记得在某处读过他们也重用密钥。
他们并不真正使用特定的编程语言,他们只是使用简单的 URL 重定向,这可以通过 HTTP 响应状态代码 301、302、307 或 308 来完成,具体取决于。
【讨论】:
重定向不是使用 html 完成的,而是使用 HTTP 标头完成的。 (状态码 301 或 302,视情况而定)。 他们必须使用 Location 标头来重定向。【参考方案2】:URL 缩短器只是生成一个短代码,将目标 URL 映射到该短代码,然后提供一个新 URL。访问 URL 会使用短代码作为键执行数据库查找,并将您重定向到目标 URL。缩短的 URL 和目标 URL 之间没有算法关联,因此如果不通过 URL 缩短器的系统,您就无法“取消映射”它。
您可以使用任何编程语言和数据存储来实现。代码生成对于确保唯一性也很简单;如果你有一个递增的主整数键,你可以简单地将键编码为 base62 并提供它。由于代码本质上是递增的,因此您永远不会发生冲突。
【讨论】:
【参考方案3】:这个过程实际上非常简单:有一个脚本询问 URL,生成一个随机字符串(并验证该字符串是否未被使用),然后将两者放入某种数据库中。当您请求一个 url 时,另一个脚本会在数据库中查找随机字符串,如果找到,则将您重定向到该站点。
由于需要诸如防止滥用、URL 过滤、垃圾邮件预防、URL 验证等功能,这在生产中当然会更加复杂。但这些实现起来非常简单。
语言无关紧要,大多数人都会这样做。
【讨论】:
"并验证该字符串尚未使用" .. 怎么样?这是最大的问题 @Stewie: SELECT * FROM mappings WHERE key = stringToCheck,并检查是否返回任何行?或您选择的数据库语言中的任何类似内容。老实说,这似乎是整个问题中最简单的部分。 @Stewie 或者他们可以使用 HashMap 映射<key, url>
@DavidLiu 不是需要不断地重新生成和发出查询,直到它没有输出结果吗?随着数据大小的增加,检查的时间也会增加。在最坏的情况下,对数据库的查询数将为 n-1,其中 n 是“字符串”的数量;当你有 100M 个字符串时会发生什么?
@Stewie 这完全是一个不同的问题,解决方案本身的原理有问题。你是对的,再生问题最终会成为一个问题,但这就是为什么我说“验证字符串尚未使用”是解决方案的简单部分。有很多替代解决方案可以在不替换的情况下随机进行。以上是关于网址缩短器如何工作? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章