duSk8wK
),该部分映射到他们的数据库中。在数据库中,他们找到一个描述(有时候)、您的姓名(有时候)和真实的URL。然后他们发出重定向,这是一个HTTP 302响应,其中包含目标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等)。
因此,在您的Web服务器上,您可能会有一个类似于以下伪代码的路由动作:
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
该方法会将任何在您的域名www.mytinyurl.com后面带有文本的请求路由到与之关联的方法RouteURL。该方法会将在URL中斜杠后面传递的文本提供给该方法。
例如,假设您请求:www.mytinyurl.com/fif
“fif” 将被传递给您的方法 RouteURL(String UrlID)。然后,RouteURL 会将“fif” 转换为它的十进制等价值20103,并发出一个数据库请求来重定向到存储在ID 20103下的任何URL(在此示例中为www.digg.com )。在重定向到正确的URL之前,还会将Digg的访问计数增加1。
这只是一个非常简化的例子,但您应该能够得到一般想法。
O(1)
的查找以找到重复的 URL,然后将现有的微小 URL 路由到那个 URL,或者选择生成一个新的 URL。据我所知,goo.gl
会为相同的 URL 重用微小的 URL;在此页面上尝试使用 goo.gl/8gVb8X
,看看你是否也得到了相同的结果。 - Kingz62
个网站增加到约 1,112,064
个。1,112,064*1,112,064
)- 在2009年11月,bit.ly
上的缩短链接被访问了21亿次(当时,bit.ly和TinyURL是最广泛使用的URL缩短服务。),这比你只用2个符号容纳的数量少了约600倍,因此在所有的URL缩短服务存在的整个时间内,至少还要再增加一个第三个符号,才能满足需求的持续增长。为了理解URL缩短的过程,我在GitHub上创建了一个演示项目,并发布了一篇博客文章。请参考此内容并告诉我是否有所帮助。
博客文章:URL缩短