如何像服务TinyURL的或METAMARK工作?
难道他们只是用[虚?]网页这仅仅是提供一个“HTTP重定向”到原来的URL微小的URL钥匙联系起来? 或者是有更多的“魔力”呢?
[原创措辞]我经常使用网址缩短喜欢TinyURL的,METAMARK和其他服务,但我每次做的时候,我不知道这些服务是如何工作的。 难道他们创建一个新的文件,将重定向到另一页或他们使用子域名?
如何像服务TinyURL的或METAMARK工作?
难道他们只是用[虚?]网页这仅仅是提供一个“HTTP重定向”到原来的URL微小的URL钥匙联系起来? 或者是有更多的“魔力”呢?
[原创措辞]我经常使用网址缩短喜欢TinyURL的,METAMARK和其他服务,但我每次做的时候,我不知道这些服务是如何工作的。 难道他们创建一个新的文件,将重定向到另一页或他们使用子域名?
不,他们不使用的文件。 当你点击这样的链接,一个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服务提供了这一点)。
其他人回答了重定向是如何工作的,但你也应该知道他们是如何生成他们的小网址。 你会误听说他们在以产生用于缩短URL是唯一的代码创建URL的哈希值。 这是在大多数情况下不正确,他们不使用散列算法(如你可能有冲突)。
最流行的URL缩短服务简单地采取的ID中的URL的数据库中,然后将其转换为任一底座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框架,允许灵活的路由使操作输入网址很容易(红宝石,ASP.NET MVC等)。
所以,在你的网络服务器,你可能有一个路由操作,看起来像(伪代码):
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
哪些航线任何传入的请求到服务器有你的相关方法,RouteURL域www.mytinyurl.com后的任何文本。 它提供了在你的URL给该方法通过在正斜杠后面的文本。
所以,让我们说你的要求:www.mytinyurl.com/fif
“FIF”将被传递给你的方法,RouteURL(URLID字符串)。 然后RouteURL将“FIF”转换为它的base10相当于20103和数据库请求将进行重定向到URL无论是ID 20103下保存(在这种情况下,www.digg.com)。 您也将通过一个重定向到正确的URL之前增加对Digg的访问计数。
这是一个非常简单的例子,但你应该能够得到的总体思路。
作为扩展@A萨尔塞多的答案:
这使得不必增加额外的符号之前高量的网站 - 通过使用Unicode(UTF-8)编码在缩短的URL字符某些URL缩短服务(Tinyarro.ws)到极致。 由于大多数的UTF-8是接受使用 ( (IRI)RFC 3987大多数浏览器处理 ),从凸块62
每个符号网站〜 1,112,064
。
要正确看待一个能够编码1.2366863e + 12位点与2个符号( 1,112,064*1,112,064
) - 2009年11月,在缩短的链接bit.ly
被访问2.1
十亿次( 大约在那个时候,bit.ly和TinyURL的是最广泛常用的网址缩短服务。 )这是〜小于你能适应在短短的2个符号,所以对于所有的网址缩短服务的存在的整个持续时间应该持续20年最低,直到加入第三个符号600倍。
简单地说,URL缩短字符(原始,长蹩脚URL)的任意长序列映射到字符的短和光滑序列。 这还不算什么,但散列,这是最常见的用于创建查找表,HashMap中,MD5哈希值用于加密的目的等。
要了解我创建GitHub上一个示范项目,也是一个博客文章的网址缩短过程。 请参阅本,让我知道,如果它是有帮助的。
博客文章: 网址缩短