TinyURL或Metamark等服务如何运作? 他们只是简单地将微小的URL密钥与[虚拟?]网页相关联,该网页仅提供原始URL的“HTTP重定向”?或者它有更多的“魔力”吗?
[原文] 我经常使用像TinyURL,Metamark等其他网址缩短服务,但每次我都这样做,我想知道这些服务是如何运作的。他们是否创建了一个新文件,将重定向到另一个页面,还是使用子域?
答案 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上创建了一个演示项目,还有一篇博文。请参阅此内容并告诉我它是否有用。