发布于 2009-10-13 19:50:07
不,他们不使用文件。当你点击这样的链接时,一个带有完整网址的超文本传输协议请求就会被发送到他们的服务器,比如http://bit.ly/duSk8wK (指向这个问题的链接)。他们读取路径部分(这里是duSk8wK
),它映射到他们的数据库。在数据库中,他们会找到一个描述(有时),你的名字(有时)和真实的URL。然后,它们发出一个重定向,即HTTP 302响应和报头中的目标URL。
这种直接重定向很重要。如果你要使用文件或者首先加载超文本标记语言,然后重定向,浏览器会将TinyUrl添加到历史记录中,这不是你想要的。此外,重定向到的站点将看到引用者(您最初来自的站点)是TinyUrl链接所在的站点(即,twitter.com,您自己的站点,无论链接在哪里)。这一点同样重要,这样网站所有者就可以看到人们来自哪里。如果加载了重定向的页面,这也不会起作用。
PS:还有更多类型的重定向。HTTP 301的意思是:永久重定向。如果发生这种情况,浏览器将不再请求bit.ly或TinyUrl站点,而这些站点希望统计命中率。这就是为什么使用HTTP302,它是一个临时重定向。浏览器会再次询问TinyUrl.com或bit.ly,这使得它可以为你计算点击次数(一些小型url服务提供了这一功能)。
发布于 2009-10-13 20:40:34
其他人已经回答了重定向是如何工作的,但您也应该知道它们是如何生成微型urls的。您会错误地听到他们创建URL的散列,以便为缩短的URL生成唯一的代码。这在大多数情况下是不正确的,他们没有使用散列算法(在这种情况下,您可能会有冲突)。
大多数流行的网址缩短服务只是在网址数据库中获取ID,然后将其转换为Base36 a-z0-9或Base62(区分大小写)。
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等)。
因此,在您的you服务器上,您可能有一个路由操作,如下所示(伪代码):
Route: www.mytinyurl.com/{UrlID}
Route Action: RouteURL(UrlID);
它将任何传入的请求路由到您的服务器,该服务器在您的域www.mytinyurl.com之后包含任何文本到您关联的方法RouteURL。它将URL中正斜杠后传入的文本提供给该方法。
因此,假设您请求: www.mytinyurl.com/fif
然后将"fif“传递给您的方法RouteURL(String Fif)。然后,RouteURL会将"fif“转换为它的等价物20103,并发出一个数据库请求,以重定向到存储在ID 20103下的任何base10 (在本例中为www.digg.com)。在重定向到正确的URL之前,您还可以将Digg的访问计数增加1。
这是一个非常简单的例子,但你应该能够得到大体的概念。
发布于 2016-06-13 23:45:33
作为@A Salcedo答案的扩展:
一些网址缩短服务(Tinyarro.ws)通过使用Unicode (UTF-8)来对缩短网址中的字符进行编码,从而在必须添加额外符号之前允许更多的网站。因为大多数UTF-8 is accepted for use ((IRI) RFC 3987 handled by most browsers)都是从62
站点的每符号到~1,112,064
。
在透视图中,一个可以用2个符号(1,112,064*1,112,064
)编码的1.2366863e+12站点-在2009年11月,bit.ly
上的缩短链接被访问2.1
十亿次(Around that time, bit.ly and TinyURL were the most widely used URL-shortening services.),这比你只能容纳2个符号少~600倍,所以对于所有url缩短服务的存在,它应该至少再持续20年,直到添加第三个符号。
https://stackoverflow.com/questions/1562367
复制相似问题