短URL服务如何工作?


105

TinyURLMetamark等服务如何工作?
他们是否只是将微小的URL密钥与仅提供“ HTTP重定向”到原始URL的[虚拟?]网页相关联?还是还有更多“魔术”呢?

[原始措辞]我经常使用URL缩短服务,例如TinyURL,Metamark等,但每次这样做,我都想知道这些服务的工作方式。他们是否创建了将重定向到另一个页面的新文件,还是使用了子域?


1
重述[非]问题:“ TinyURL之类的服务如何工作?它们是否只是将微小的URL密钥与仅提供“ HTTP重定向”到原始URL的[虚拟?]网页相关联?这是您要做什么?问吗?
mjv

1
缩短的网址是否曾经过期?(即,对于这些URL数据库条目从服务器删除)
THD

2
@thd:是的,但是它可能取决于(每日)点击量以及短网址服务提供商的政策。他们也可能允许永不过期,有些人要求会员资格。
亚伯

Answers:


224

不,他们不使用文件。当您单击这样的链接时,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,这使您可以为您统计点击数(某些小型url服务提供了此功能)。


2
实际上,我认为Bit.ly使用HTTP 301而不是302(我听到的是最后一个)
肯尼·卡森

1
由于bit.ly不允许您更改其URL之一指向的位置,因此301很有意义。无需记住bit.ly版本并重新检查它。
Joost的Schuur

11
@KennyCason / @Joost Schuur:确实使用了HTTP 301,但是带有时间戳。这变成一个MovedMoved Permanently。这是一个微妙的区别。通过添加时间戳,浏览器认为应该在达到此超时时检查资源是否已更改。其他的,例如is.gd,则使用普通301 Moved Permanently的浏览器,不需要重新检查(但通常会重新检查)。最后,诸如url4.eu之类的服务根本不会重定向,但会首先向您显示广告。使用301,该服务仍可以统计唯一身份访问者,但并非全部点击。
亚伯

6
例子中的bitly URL现在是一个真实的URL,实际上重定向回了这个问题;-)有关信息页,请参见bitly.com/duSk8wK+
罗纳德

1
@Costa:计数点击次数有很多方法,它可能会跟踪您的网卡ID,这是一种跟踪请求是否来自同一台计算机的方法。可以伪造或更改该ID,但并非万无一失。此外,它可能会跟踪或使用先前设置的第三方Cookie,并在不同的浏览器上使用该第三方Cookie,您可以通过清除所有会话数据并使用匿名浏览器进行检查。
亚伯

110

其他人已经回答了重定向的工作原理,但是您也应该知道它们如何生成其微小的url。您会错误地听到他们创建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的访问次数增加1。

这是一个非常简化的示例,但是您应该能够了解一般的想法。


12
谢谢你的解释。那么,当有人尝试为一个已经存在的长URL创建短URL时会发生什么呢?他们是否在数据库上执行全文搜索?我不这样认为,因为这会浪费太多时间。基于哈希或消息摘要的方法看起来更实用。
Piyush Kansal

@PiyushKansal,您可以在内部使用哈希值进行O(1)查找以查找重复项;然后为此路由现有的微小URL,或者可以选择生成一个新的URL。据我所知,goo.gl对于相同的URL重复使用了微小的URL。尝试在此页面上尝试此操作:您得到此>> goo.gl/8gVb8X吗?
Kingz

他们如何处理网址参数?例如www.digg.com?filter=123
罗南

7

作为@A Salcedo答案的扩展:

一些URL缩短服务(Tinyarro.ws)通过使用Unicode(UTF-8)在缩短的url中编码字符而变得极端-这允许在添加其他符号之前使用大量网站。由于大多数UTF-8都可以使用大多数浏览器处理的(IRI)RFC 3987),因此62每个符号的站点从〜过渡到〜1,112,064

从一个角度来看,可以用2个符号(1,112,064*1,112,064)编码1.2366863e + 12个站点-在2009年11月,缩短的链接bit.ly被访问了2.1十亿次(在那个时候,bit.ly和TinyURL是使用最广泛的URL缩短服务。)这比仅2个符号可容纳的内容少600倍左右,因此对于所有url缩短服务的完整存在期限,它至少应持续20年,直到添加第三个符号为止。


5

用简单的话来说,URL缩短器将任意长的字符序列(原始的长long脚url)映射为短而光滑的字符序列。这不过是哈希,哈希最常用于创建查找表,HashMap,用于加密目的的md5哈希等。

为了了解URL缩短过程,我在GitHub上创建了一个演示项目,同时还在博客中创建了一个博客。请参考此内容,让我知道是否有帮助。

博客文章:URL缩短

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.