短网址服务系统的实现及相关技术研究
2017-02-27郭一华
郭一华
(北京邮电大学网络技术研究院,北京 100876)
短网址服务系统的实现及相关技术研究
郭一华
(北京邮电大学网络技术研究院,北京 100876)
随着微博等网络社交产品的火爆发展,普通网址由于过长,在网络上传播很不方便,容易出错,在一些限制字数的场合还会严重影响正常的语言表达。因此,短网址服务逐渐兴起了。短网址网络社交平台几乎是不可或缺的,因而无论新浪微博、人人网等国内社交网络及Facebook, twitter等国外社交网络都有自己的短网址服务。同时,一批开源短网址服务项目如Phurl等也纷纷出现。短网址服务一般依附于社交网络等其他服务存在,由于使用方便,独立的短网址服务系统也有存在的价值。本文主要研究了短网址及相关技术,总结了主要的短网址转换算法,并用PHP+Apache+MySQL实现了一个局域网短网址系统。
计算机网络;短网址;重定向;长短网址转换
本文著录格式:郭一华. 短网址服务系统的实现及相关技术研究[J]. 软件,2017,38(1):81-85
0 引言
短网址服务最早出现在2002年左右[1],随着微博等限制发言字数的社交网络的兴起,短网址服务开始变得越来越重要。在微博中,连接分享是一项不可或缺的功能,而140字的长度限制对大多数URL来说都显得过短,例如要在微博中插入一个很常见的淘宝商品链接:http://item.taobao.com/item. htm?id=38689623244&ali_refid=a3_420961_1006:110 3100473:6:%C6%BB%B9%FB%B1%CA%BC%C7% B1%BEmacbook+pro:f99d0515d2ff6bdea953fd4f1-f6879f0&ali_trackid=1_f99d0515d2ff6bdea953fd4f1f 6879f0&spm=a310c.2169929.5642913.1.eScQ3n就占去近100个字符,而真正有作用的文字内容被大量减少。这一大段字符对于读者几乎起不到任何作用,反而会让人产生陌生排斥的情绪,不愿意去点击链接,这样就降低了微博分享扩散的能力[2]。而文字内容减少还会使用户不得不大幅减少需要表达的内容,使微博的信息量大打折扣。非核心内容占据了大部分篇幅,核心内容只能精简再精简,在当下提倡信息简短而高效的网络环境下,不得不说这是一种效率很低的做法,需要有一种解决方法,使得用户能够在用微博分享链接的同时,尽可能地提高一条微博中的信息含量,并且不影响核心内容的表达,短网址的兴起正契合了这一需求。
通过短网址服务,用户可以将很长的URL缩至几个字符,即使在惜字如金的微博中也丝毫不会影响信息表达。除此之外,短网址还可以作为网址别名,以便于记忆和推广。而移动互联网近年来的快速发展,也加快了短网址的推广与应用的速度。因此,国内外各主流社交网络平台都推出了自己的短网址服务。此外,许多开源短网址项目如Phurl[3]等也都各具特色,不但程序短小精悍,功能也很齐全,为个人博客、小型网站等搭建自己的短网址服务提供了很大便利。
总之,短网址已经成为社交网络平台上不可或缺的一项技术,其核心长短网址转换及相关技术也成为一项很有意义的研究课题。
本文研究了常见的的各种长短网址转换算法和各自优缺点,使用PHP+Apache+Myspl技术实现了一个局域网短网址服务系统。
1 长短网址转换算法
长短网址转换在本质上是一个映射函数f:x -> y。由于要做到每个长网址与一个短网址一一对应,则这个映射函数必须同时具有两个特点:
1. x1!=x2,则f(x1)!=f(x2);
2. 任意给出一个y,总会有唯一的x与之相对应
则对于任意给出的线性函数,都符合这两个条件。出于对x(长网址)特点的考虑,以及快速得到y的要求,转换算法一般有以下两种[4]:
1. 通过高进制数转换,得到短网址。
2. 利用MD5、CRC32等hash方法得到短网址。
2.1 通过高进制数转换得到短网址
短网址字符集共有n个字符,则短网址可以视作一个n进制数,本文中所使用的短网址字符集均由62个字符组成(大小写英文字母以及数字0-9),则每一个短网址都是一个62进制数。在数据库中增添一列ID,设为自增长型整数,对于每一个长地址,将数据库中记录的十进制ID转换为62进制数,再作为字符集索引得到短网址。PHP代码如下:
转换为高进制可以得到短网址,同理,由短网址转换为十进制数可以得到长网址ID,这样进一步加快了数据库访问速度,PHP代码如下:
得到结果后作为ID在数据库中查找即可得到长网址,由于有序整数的查找速度很快,所以用这种方法可以很快完成短变长。
利用高进制的转换,可以很快从长网址得到短网址,或者从短网址得到长网址,尤其是通过短网址查找长网址时,通过一个进制转换函数得到长网址在数据库中的ID,避免了对字符串的查找操作,大大加速了对数据库的访问。而且也不会造成短网址的冲突,由于这些明显的优点,实际应用中许多短网址服务都采用了这转换算法。
由于这种方法生成短网址之前需要先得到数据库中的ID,因此转换之前需要先访问一次数据库。为避免并发性冲突,需要对数据库加锁,当同时访问的用户较多时,可能对数据库造成较大压力,因此大型短网址服务需要尤其注意负载均衡问题。
2.2 利用hash方法得到短网址
通过对转换算法要求的分析,很容易想到使用hash算法进行转换,MD5就是一种实用而且成熟的hash算法。其优点在于得到校验码长度固定,几乎没有冲突,缺点在于得到字符串长度为32字符,远远长于目前大多数短网址长度。因此,想要进行短网址转换,必须在MD5算法基础上缩短其字符串长度,具体算法可以总结为:
输入:长网址URL。
输出:短网址URL后缀。
1. 利用MD5加密算法将长网址加密长网址URL,得到长度为32个字符的字符串M,将M分为M1,M2,M3,M4四部分,每部分长度为8个字符。
2. 将Mi(1≤i≤4)与0x3fffffff做按位与操作,截取低30位,得到M′i。
3. 将M′i分成6段,每段长5位,作为索引在62个字符的字符集中取得字符,可以得到一个长度为6个字符的字符串Si。
4. 得到4个字符串S1,S2,S3,S4,随机取其中一个,作为短网址URL后缀。
虽然MD5加密已经被破解,但日常使用中几乎不会遇到冲突的情况,因此除非制造大量MD5冲突恶意攻击,实际应用中遇到MD5冲突导致无法使用的情况基本不存在。使用该算法得到的短网址字符串几乎是随机的,由于MD5算法应用广泛,函数调用方便,代码书写简便,短地址生成速度也较快,因此这个方法还是比较实用的。
由于算法中对MD5加密得到的字符串进行了截取,最终得到的短网址长度固定为6个字符,则数据库中共有n条记录时,冲突概率可视为n/626,即n/56800235584,当记录数能够达到与1011相比较时,会出现较多冲突,而当记录数远远小于这个数量级时,出现冲突概率极小[5]。
与MD5类似,其他hash算法也可以用来实现短网址转换,如循环冗余检验算法CRC32,会生成32位校验码(MD5为128位),经过索引得到短网址,但由于CRC32算法本身冲突概率较大,所以只适合规模较小的短网址服务使用。
2 需求分析与总体设计
短网址服务一般附带在社交网络等其他服务中,用户需要使用该服务时,输入长网址,生成短网址。而出于安全性等方面的考虑,管理员需要能够对已生成的短网址做查找、删除、禁用等操作。综合分析,系统应该包括管理员登录,长短网址转换,短网址管理等模块。
2.1 管理员登录模块
普通用户只需要长网址转换为短网址的功能,因此不需要登录。而管理员需要管理短网址,需要登录功能以验证其权限,登陆后显示管理功能界面,并可以注销登录。管理员输入用户名和密码后,登陆系统,可以管理一生成的短网址,并能够注销登陆。
图1 管理员登录流程图Fig.1 Administrator login flowchart
图2 管理员注销登录流程图Fig.2 Administrator logout flowchart
2.2 长短网址转换模块
用户直接输入长网址,通过转换算法生成短网址,展示给用户,并且可以点击短网址直接跳转。用户输入长网址URL后,系统先在数据库中查询,如果该URL已经转换过,就直接给出转换后的短网址,否则进行长短网址转换,得到短网址,存入数据库中。
2.3 短网址管理模块
管理员登录后,进入短网址管理界面,管理员可以查找某一短网址是否存在,查找到的短网址可以进行删除、禁用操作。
删除操作删掉数据库中该条短网址的记录,禁用操作不删除记录,将该条短网址标记,点击该URL无法跳转。
图3 长短网址转换流程图Fig.3 Conversion from long URL to short flowchart
图4 短网址管理流程图Fig.4 Short URLs management flowchart
3 系统实现
在充分研究短网址服务的实现过程及相关技术的基础上,可以实现一个局域网短网址系统。整个系统采用windows环境及Eclipes平台下MySQL+Apache+ PHP开发,DNS服务器采用windows server 2003。长短网址转换算法采用MD5加密实现,重定向过程采用Apache的伪静态及PHP的301重定向实现。
3.1 数据库设计
数据库包含两张表,表user_admin记录管理员相关信息,包括管理员ID、用户名、密码等。
表long_to_short记录了长短网址对应关系包括ID、长网址、短网址、禁用标志等。
表1 管理员信息表Tab.1 Administrator information table
表2 长短网址对应表Tab.2 Long URLs to short URLs table
3.2 长短网址转换模块
由于管理员登录与短网址管理模块实现比较简单,这里主要介绍长短网址转换模块。其中包含主要函数有:
urlExists($longurl):检查数据库中记录是否存在,参数为长网址;
selectByLong($longurl):通过长网址查找短网址后缀,参数为长网址;
selectByShort($shorturl):通过短网址后缀查找长网址,参数为短网址后缀;
insert($longurl,$shorturl):将记录插入数据库,参数分别为长网址和短网址后缀;
shorten($input):短网址转换函数,参数为长网址,得到短网址后缀。函数主要实现了2.2中所述算法,PHP实现代码如下:
3.3 重定向过程
点击短网址链接后,首先发出DNS查询请求,得到域名www.short.t对应ip后,访问到web服务器根目录,再进行URL跳转,这个过程由Apache伪静态+PHP301重定向完成。
1. DNS服务器设置
DNS服务器搭建在虚拟机中的windows server 2003系统下,设置正向查找区域short.t,主机为www,对应ip地址为局域网短网址服务主机的ip。
2. Apache伪静态设置
在Apache设置中开启mod_rewrite功能,并在站点目录下添加文件.htaccess,其中内容为:
即:当访问短网址无法找到文件时,将重定向至redirect.php文件。
在redirect.php中,通过提取短网址的后缀,可以在数据库中找到对应的长网址,跳转至该URL完成访问,其中关键代码为:
4 系统测试
采用黑盒测试方法,设计用例测试系统各功能。例如长短网址转换功能测试结果如下:
图5 长短网址转换测试结果Fig.5 Test result of conversion from a long URL to a short URL
长网址被成功转换为短网址,点击短网址超链接可以跳转至长网址指向网页。
其他功能可以参照进行测试,结果证明系统功能完善,验证了其可用性。
5 结语
本文从短网址服务在实际中的应用出发,研究了长短网址转换的算法,对比了不同方法的优缺点,并用MySQL+Apache+PHP实现了一个局域网短网址系统,实现了长短网址转换,短网址管理等功能。短网址服务在实际应用中还有很多实用的扩展功能,比如点击量统计,自定义网址等[6],另外短网址在安全性上也存在一些值得研究的问题[7],这些都是下一步工作中需要解决的问题。
[1] Demetris Antoniades, Iasonas Polakis, Georgios Kontaxis, Elias Athanasopoulos, Sotiris Ioannidis, Evangelos P. Markatos, Thomas Karagiannis. we.b: The web of short URLs[A]. Proceedings of the 20th international conference on World Wide Web[C]. NY, US: ACM New York, 2011: 715-724
[2] Chris Grier, Kurt Thomas, Vern Paxson, Michael Zhang. @spam The Underground on 140 Characters or less [A]. Proceedings of the 17th ACM conference on Computer and communications security[C]. NY, US: ACM New York, 2010: 27-37.
[3] hcuk94. Phurl[OL]. https://github.com/hcuk94/phurl.
[4] 茅思雨. 短链接的秘密[J], 环球企业家, 2012, 12: 52-53
[5] Beiyeqingteng. 短址(short URL)原理及其实现[OL]. http:// blog.csdn.net/beiyeqingteng/article/details/7706010, 2012-07-01.
[6] 蔡岳峰. 网易短网址服务系统的设计与实现[D], 北京:北京交通大学, 2012.
[7] 成亦陈, 黄淑华. 恶意短链接欺骗的防护对策研究[J], 信息网络安全, 2013, 7: 32-35
The Implementation of Short URL Service System and Research of The Related Techniques
GUO Yi-hua
(Institute of Network Technology, Beijing University of Posts and Telecommunications, Beijing, 100876)
With the development of social networking products such as weibo, ordinary web URLs seem too long to spread on the Internet, and error-prone. In some situation that the max number of the words are limited, long URLs even impede language expression. Therefore, the short URL service gradually rise. For many social networking platform, short URLs are almost indispensable. So whether domestic social networking such as sina weibo, renren, or social networks abroad such as Facebook, twitter all has their own short URL service. At the same time, a number of open source short URL service projects such as Phurl have also appeared. Generally, short URL service depends on other web service such as social network. However, for it is convenience, independent short URL service systems also have value. This paper mainly studied the short URL and related technology, summarizes the common long to short URL conversion algorithms. Then use PHP + MySQL + Apache to implement a short URL service system under LAN.
Computer network; Short URLs; Redirection; Conversion from long URLs to short URLs
TP393
A
10.3969/j.issn.1003-6970.2017.01.0017
郭一华(1991-),男,硕士研究生,主要研究方向:宽带网技术。