短网址服务如何工作?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (193)

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

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

提问于
用户回答回答于

不,他们不使用文件。当你点击一个这样的链接时,一个HTTP请求会被发送到他们的服务器的完整的URL,如http://bit.ly/duSk8wK(链接到这个问题)。他们读取duSk8wK映射到其数据库的路径部分(此处)。在数据库中,他们找到一个描述(有时),你的名字(有时)和真实的URL。然后他们发出一个重定向,这是一个HTTP 302响应,并且头部中包含目标URL。

这种直接重定向很重要。如果要使用文件或首次加载HTML然后重定向,浏览器会将TinyUrl添加到历史记录中,这不是想要的。另外,被重定向到的网站会将引荐网站(最初来自的网站)看作TinyUrl链接所在的网站(即twitter.com,自己的网站,无论链接在哪里)。这一点同样重要,以便网站所有者可以看到人们来自哪里。如果页面被加载重定向,这也不起作用。

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

用户回答回答于

其他人已经回答了重定向如何工作,但你也应该知道他们是如何产生他们的小网站的。将错误地听到他们创建了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”转换为其2010年的base10等效数据库,并且会将数据库请求重定向到ID 20103(本例中为www.digg.com)下存储的任何URL。在重定向到正确的URL之前,还会将Digg的访问次数增加一次。

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

扫码关注云+社区

领取腾讯云代金券