114

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

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

4

4 回答 4

236

不,他们不使用文件。当您单击这样的链接时,将使用完整的 URL 将 HTTP 请求发送到他们的服务器,例如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 服务提供此功能)。

于 2009-10-13T19:50:06.650 回答
113

其他人已经回答了重定向是如何工作的,但你也应该知道它们是如何生成它们的小 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 下的任何 URL(在本例中为 www.digg.com)。在重定向到正确的 URL 之前,您还可以将 Digg 的访问次数增加一。

这是一个非常简化的示例,但您应该能够了解总体思路。

于 2009-10-13T20:40:33.723 回答
7

作为@A Salcedo 答案的扩展:

一些 url 缩短服务 (Tinyarro.ws) 通过使用 Unicode (UTF-8) 对缩短的 url 中的字符进行编码来达到极端 - 这允许更多的网站在必须添加额外的符号之前。由于大多数UTF-8 都被接受使用大多数浏览器处理的 (IRI) RFC 3987),因此每个符号的站点都会颠簸62到 ~ 1,112,064

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

于 2016-06-13T15:45:32.613 回答
7

简而言之,URL 缩短器将任意长的字符序列(原始的、长的、糟糕的 url)映射为短而流畅的字符序列。这只不过是散列,它最常用于创建查找表、HashMap、用于加密目的的 md5 散列等。

为了理解 URL-Shortening 过程,我在 GitHub 上创建了一个演示项目以及一篇博文。请参考此内容并让我知道它是否有帮助。

博文:网址缩短

于 2016-10-23T04:33:17.900 回答