【问题标题】:How does a URL Shortener work? [closed]网址缩短器如何工作? [关闭]
【发布时间】:2011-06-02 03:29:11
【问题描述】:

我想知道 URL Shortener 是如何工作的,例如他们如何从地址栏中提取文本并将其映射到正确的 URL,然后将其重定向。他们使用什么编程语言?他们如何维护映射的历史?他们如何确保缩短网址的唯一性?外行如何在不访问 URL 的情况下取消映射?

【问题讨论】:

  • 只有 3 票接近?来吧,他想学点东西,快点关闭吧!!!
  • 这是我的确切问题,我很失望地看到它已关闭。这不是模棱两可或不完整的——他的要求非常具体。
  • @bmargulies 我认为问题不应该被关闭,这非常有帮助,甚至可以回答,还想 43 次投票,你决定关闭它..为什么??

标签: url url-shortener tinyurl


【解决方案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 这完全是一个不同的问题,解决方案本身的原理有问题。你是对的,再生问题最终会成为一个问题,但这就是为什么我说“验证字符串尚未使用”是解决方案的简单部分。有很多替代解决方案可以在不替换的情况下随机进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多