短网址服务如何运作?

时间:2009-10-13 19:20:09

标签: web-services url url-shortener bit.ly short-url

TinyURLMetamark等服务如何运作? 他们只是简单地将微小的URL密钥与[虚拟?]网页相关联,该网页仅提供原始URL的“HTTP重定向”?或者它有更多的“魔力”吗?

[原文] 我经常使用像TinyURL,Metamark等其他网址缩短服务,但每次我都这样做,我想知道这些服务是如何运作的。他们是否创建了一个新文件,将重定向到另一个页面,还是使用子域?

4 个答案:

答案 0 :(得分:214)

不,他们不使用文件。当您单击类似的链接时,HTTP请求将使用完整的URL发送到其服务器,例如http://bit.ly/duSk8wK(链接到此问题)。他们读取路径部分(这里是duSk8wK),它映射到他们的数据库。在数据库中,他们找到描述(有时),您的名字(有时)和真实的URL。然后他们发出重定向,这是HTTP 302响应和标题中的目标URL。

这种直接重定向非常重要。如果您要使用文件或首先加载HTML然后重定向,浏览器会将TinyUrl添加到历史记录中,这不是您想要的。此外,重定向到的网站将看到推荐人(您最初来自的网站)作为TinyUrl链接所在的网站(即twitter.com,您自己的网站,无论链接在哪里)。这同样重要,因此网站所有者可以看到人们来自哪里。如果加载重定向的页面,这也是行不通的。

PS:有更多类型的重定向。 HTTP 301表示:重定向永久。如果发生这种情况,浏览器将不再请求bit.ly或TinyUrl网站,并且这些网站想要计算点击数。这就是使用HTTP 302的原因,这是一个临时重定向。浏览器每次都会询问TinyUrl.com或bit.ly,这样可以为您计算点击数(一些小网址提供此服务)。

答案 1 :(得分:100)

其他人已经回答了重定向的工作原理,但你也应该知道他们如何生成他们的小网址。你会错误地听到他们创建URL的哈希值,以便为缩短的URL生成唯一的代码。在大多数情况下,这是不正确的,它们没有使用散列算法(可能会发生冲突)。

大多数流行的URL缩短服务只是在URL的数据库中获取ID,然后将其转换为Base 36 [a-z0-9](不区分大小写)或Base 62(区分大小写)。

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

允许灵活路由的Web框架使得处理传入的URL变得非常简单(Ruby,ASP.NET MVC等)。

因此,在您的网络服务器上,您可能会有一个类似于(伪代码)的路由操作:

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

将您域www.mytinyurl.com之后有任何文本的任何传入请求路由到您的关联方法RouteURL。它将URL中正斜杠之后传入的文本提供给该方法。

所以,让我们说你要求:www.mytinyurl.com/fif

然后将

“fif”传递给您的方法RouteURL(String UrlID)。然后,RouteURL将“fif”转换为其相应的base10,20103,并且将进行数据库请求以重定向到ID 20103(在本例中为www.digg.com)下存储的任何URL。在重定向到正确的URL之前,您还需要将Digg的访问次数增加一次。

这是一个非常简单的例子,但你应该能够得到一般的想法。

答案 2 :(得分:6)

作为@A Salcedo的延伸回答:

一些网址缩短服务(Tinyarro.ws)通过使用Unicode(UTF-8)对缩短网址中的字符进行编码而变得极端 - 在允许添加额外符号之前允许更多数量的网站。由于大多数UTF-8 is accepted for use(IRI) RFC 3987 handled by most browsers)从每个符号的62个网站突然变为〜1,112,064

从透视角度来看,可以编码1.2366863e + 12个带有2个符号(1,112,064*1,112,064)的网站 - 在2009年11月,bit.ly上的缩短链接被访问2.1十亿次({{ 3}})这比你只能容纳2个符号少600倍,所以在所有网址缩短服务存在的整个持续时间内,它应该再持续20年,直到添加第三个符号。

答案 3 :(得分:1)

简单来说,URL缩短器将任意长的字符序列(原始的,冗长的网址)映射到一个短而流畅的字符序列中。这只是Hashing,它最常用于创建查找表,HashMap,md5 Hash用于加密目的等。

为了理解URL缩短过程,我在GitHub上创建了一个演示项目,还有一篇博文。请参阅此内容并告诉我它是否有用。

博文:URL Shortening