郭一華
(北京郵電大學網(wǎng)絡技術研究院,北京 100876)
短網(wǎng)址服務系統(tǒng)的實現(xiàn)及相關技術研究
郭一華
(北京郵電大學網(wǎng)絡技術研究院,北京 100876)
隨著微博等網(wǎng)絡社交產品的火爆發(fā)展,普通網(wǎng)址由于過長,在網(wǎng)絡上傳播很不方便,容易出錯,在一些限制字數(shù)的場合還會嚴重影響正常的語言表達。因此,短網(wǎng)址服務逐漸興起了。短網(wǎng)址網(wǎng)絡社交平臺幾乎是不可或缺的,因而無論新浪微博、人人網(wǎng)等國內社交網(wǎng)絡及Facebook, twitter等國外社交網(wǎng)絡都有自己的短網(wǎng)址服務。同時,一批開源短網(wǎng)址服務項目如Phurl等也紛紛出現(xiàn)。短網(wǎng)址服務一般依附于社交網(wǎng)絡等其他服務存在,由于使用方便,獨立的短網(wǎng)址服務系統(tǒng)也有存在的價值。本文主要研究了短網(wǎng)址及相關技術,總結了主要的短網(wǎng)址轉換算法,并用PHP+Apache+MySQL實現(xiàn)了一個局域網(wǎng)短網(wǎng)址系統(tǒng)。
計算機網(wǎng)絡;短網(wǎng)址;重定向;長短網(wǎng)址轉換
本文著錄格式:郭一華. 短網(wǎng)址服務系統(tǒng)的實現(xiàn)及相關技術研究[J]. 軟件,2017,38(1):81-85
短網(wǎng)址服務最早出現(xiàn)在2002年左右[1],隨著微博等限制發(fā)言字數(shù)的社交網(wǎng)絡的興起,短網(wǎng)址服務開始變得越來越重要。在微博中,連接分享是一項不可或缺的功能,而140字的長度限制對大多數(shù)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]。而文字內容減少還會使用戶不得不大幅減少需要表達的內容,使微博的信息量大打折扣。非核心內容占據(jù)了大部分篇幅,核心內容只能精簡再精簡,在當下提倡信息簡短而高效的網(wǎng)絡環(huán)境下,不得不說這是一種效率很低的做法,需要有一種解決方法,使得用戶能夠在用微博分享鏈接的同時,盡可能地提高一條微博中的信息含量,并且不影響核心內容的表達,短網(wǎng)址的興起正契合了這一需求。
通過短網(wǎng)址服務,用戶可以將很長的URL縮至幾個字符,即使在惜字如金的微博中也絲毫不會影響信息表達。除此之外,短網(wǎng)址還可以作為網(wǎng)址別名,以便于記憶和推廣。而移動互聯(lián)網(wǎng)近年來的快速發(fā)展,也加快了短網(wǎng)址的推廣與應用的速度。因此,國內外各主流社交網(wǎng)絡平臺都推出了自己的短網(wǎng)址服務。此外,許多開源短網(wǎng)址項目如Phurl[3]等也都各具特色,不但程序短小精悍,功能也很齊全,為個人博客、小型網(wǎng)站等搭建自己的短網(wǎng)址服務提供了很大便利。
總之,短網(wǎng)址已經(jīng)成為社交網(wǎng)絡平臺上不可或缺的一項技術,其核心長短網(wǎng)址轉換及相關技術也成為一項很有意義的研究課題。
本文研究了常見的的各種長短網(wǎng)址轉換算法和各自優(yōu)缺點,使用PHP+Apache+Myspl技術實現(xiàn)了一個局域網(wǎng)短網(wǎng)址服務系統(tǒng)。
長短網(wǎng)址轉換在本質上是一個映射函數(shù)f:x -> y。由于要做到每個長網(wǎng)址與一個短網(wǎng)址一一對應,則這個映射函數(shù)必須同時具有兩個特點:
1. x1!=x2,則f(x1)!=f(x2);
2. 任意給出一個y,總會有唯一的x與之相對應
則對于任意給出的線性函數(shù),都符合這兩個條件。出于對x(長網(wǎng)址)特點的考慮,以及快速得到y(tǒng)的要求,轉換算法一般有以下兩種[4]:
1. 通過高進制數(shù)轉換,得到短網(wǎng)址。
2. 利用MD5、CRC32等hash方法得到短網(wǎng)址。
2.1 通過高進制數(shù)轉換得到短網(wǎng)址
短網(wǎng)址字符集共有n個字符,則短網(wǎng)址可以視作一個n進制數(shù),本文中所使用的短網(wǎng)址字符集均由62個字符組成(大小寫英文字母以及數(shù)字0-9),則每一個短網(wǎng)址都是一個62進制數(shù)。在數(shù)據(jù)庫中增添一列ID,設為自增長型整數(shù),對于每一個長地址,將數(shù)據(jù)庫中記錄的十進制ID轉換為62進制數(shù),再作為字符集索引得到短網(wǎng)址。PHP代碼如下:
轉換為高進制可以得到短網(wǎng)址,同理,由短網(wǎng)址轉換為十進制數(shù)可以得到長網(wǎng)址ID,這樣進一步加快了數(shù)據(jù)庫訪問速度,PHP代碼如下:
得到結果后作為ID在數(shù)據(jù)庫中查找即可得到長網(wǎng)址,由于有序整數(shù)的查找速度很快,所以用這種方法可以很快完成短變長。
利用高進制的轉換,可以很快從長網(wǎng)址得到短網(wǎng)址,或者從短網(wǎng)址得到長網(wǎng)址,尤其是通過短網(wǎng)址查找長網(wǎng)址時,通過一個進制轉換函數(shù)得到長網(wǎng)址在數(shù)據(jù)庫中的ID,避免了對字符串的查找操作,大大加速了對數(shù)據(jù)庫的訪問。而且也不會造成短網(wǎng)址的沖突,由于這些明顯的優(yōu)點,實際應用中許多短網(wǎng)址服務都采用了這轉換算法。
由于這種方法生成短網(wǎng)址之前需要先得到數(shù)據(jù)庫中的ID,因此轉換之前需要先訪問一次數(shù)據(jù)庫。為避免并發(fā)性沖突,需要對數(shù)據(jù)庫加鎖,當同時訪問的用戶較多時,可能對數(shù)據(jù)庫造成較大壓力,因此大型短網(wǎng)址服務需要尤其注意負載均衡問題。
2.2 利用hash方法得到短網(wǎng)址
通過對轉換算法要求的分析,很容易想到使用hash算法進行轉換,MD5就是一種實用而且成熟的hash算法。其優(yōu)點在于得到校驗碼長度固定,幾乎沒有沖突,缺點在于得到字符串長度為32字符,遠遠長于目前大多數(shù)短網(wǎng)址長度。因此,想要進行短網(wǎng)址轉換,必須在MD5算法基礎上縮短其字符串長度,具體算法可以總結為:
輸入:長網(wǎng)址URL。
輸出:短網(wǎng)址URL后綴。
1. 利用MD5加密算法將長網(wǎng)址加密長網(wǎng)址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,隨機取其中一個,作為短網(wǎng)址URL后綴。
雖然MD5加密已經(jīng)被破解,但日常使用中幾乎不會遇到?jīng)_突的情況,因此除非制造大量MD5沖突惡意攻擊,實際應用中遇到MD5沖突導致無法使用的情況基本不存在。使用該算法得到的短網(wǎng)址字符串幾乎是隨機的,由于MD5算法應用廣泛,函數(shù)調用方便,代碼書寫簡便,短地址生成速度也較快,因此這個方法還是比較實用的。
由于算法中對MD5加密得到的字符串進行了截取,最終得到的短網(wǎng)址長度固定為6個字符,則數(shù)據(jù)庫中共有n條記錄時,沖突概率可視為n/626,即n/56800235584,當記錄數(shù)能夠達到與1011相比較時,會出現(xiàn)較多沖突,而當記錄數(shù)遠遠小于這個數(shù)量級時,出現(xiàn)沖突概率極小[5]。
與MD5類似,其他hash算法也可以用來實現(xiàn)短網(wǎng)址轉換,如循環(huán)冗余檢驗算法CRC32,會生成32位校驗碼(MD5為128位),經(jīng)過索引得到短網(wǎng)址,但由于CRC32算法本身沖突概率較大,所以只適合規(guī)模較小的短網(wǎng)址服務使用。
短網(wǎng)址服務一般附帶在社交網(wǎng)絡等其他服務中,用戶需要使用該服務時,輸入長網(wǎng)址,生成短網(wǎng)址。而出于安全性等方面的考慮,管理員需要能夠對已生成的短網(wǎng)址做查找、刪除、禁用等操作。綜合分析,系統(tǒng)應該包括管理員登錄,長短網(wǎng)址轉換,短網(wǎng)址管理等模塊。
2.1 管理員登錄模塊
普通用戶只需要長網(wǎng)址轉換為短網(wǎng)址的功能,因此不需要登錄。而管理員需要管理短網(wǎng)址,需要登錄功能以驗證其權限,登陸后顯示管理功能界面,并可以注銷登錄。管理員輸入用戶名和密碼后,登陸系統(tǒng),可以管理一生成的短網(wǎng)址,并能夠注銷登陸。
圖1 管理員登錄流程圖Fig.1 Administrator login flowchart
圖2 管理員注銷登錄流程圖Fig.2 Administrator logout flowchart
2.2 長短網(wǎng)址轉換模塊
用戶直接輸入長網(wǎng)址,通過轉換算法生成短網(wǎng)址,展示給用戶,并且可以點擊短網(wǎng)址直接跳轉。用戶輸入長網(wǎng)址URL后,系統(tǒng)先在數(shù)據(jù)庫中查詢,如果該URL已經(jīng)轉換過,就直接給出轉換后的短網(wǎng)址,否則進行長短網(wǎng)址轉換,得到短網(wǎng)址,存入數(shù)據(jù)庫中。
2.3 短網(wǎng)址管理模塊
管理員登錄后,進入短網(wǎng)址管理界面,管理員可以查找某一短網(wǎng)址是否存在,查找到的短網(wǎng)址可以進行刪除、禁用操作。
刪除操作刪掉數(shù)據(jù)庫中該條短網(wǎng)址的記錄,禁用操作不刪除記錄,將該條短網(wǎng)址標記,點擊該URL無法跳轉。
圖3 長短網(wǎng)址轉換流程圖Fig.3 Conversion from long URL to short flowchart
圖4 短網(wǎng)址管理流程圖Fig.4 Short URLs management flowchart
在充分研究短網(wǎng)址服務的實現(xiàn)過程及相關技術的基礎上,可以實現(xiàn)一個局域網(wǎng)短網(wǎng)址系統(tǒng)。整個系統(tǒng)采用windows環(huán)境及Eclipes平臺下MySQL+Apache+ PHP開發(fā),DNS服務器采用windows server 2003。長短網(wǎng)址轉換算法采用MD5加密實現(xiàn),重定向過程采用Apache的偽靜態(tài)及PHP的301重定向實現(xiàn)。
3.1 數(shù)據(jù)庫設計
數(shù)據(jù)庫包含兩張表,表user_admin記錄管理員相關信息,包括管理員ID、用戶名、密碼等。
表long_to_short記錄了長短網(wǎng)址對應關系包括ID、長網(wǎng)址、短網(wǎng)址、禁用標志等。
表1 管理員信息表Tab.1 Administrator information table
表2 長短網(wǎng)址對應表Tab.2 Long URLs to short URLs table
3.2 長短網(wǎng)址轉換模塊
由于管理員登錄與短網(wǎng)址管理模塊實現(xiàn)比較簡單,這里主要介紹長短網(wǎng)址轉換模塊。其中包含主要函數(shù)有:
urlExists($longurl):檢查數(shù)據(jù)庫中記錄是否存在,參數(shù)為長網(wǎng)址;
selectByLong($longurl):通過長網(wǎng)址查找短網(wǎng)址后綴,參數(shù)為長網(wǎng)址;
selectByShort($shorturl):通過短網(wǎng)址后綴查找長網(wǎng)址,參數(shù)為短網(wǎng)址后綴;
insert($longurl,$shorturl):將記錄插入數(shù)據(jù)庫,參數(shù)分別為長網(wǎng)址和短網(wǎng)址后綴;
shorten($input):短網(wǎng)址轉換函數(shù),參數(shù)為長網(wǎng)址,得到短網(wǎng)址后綴。函數(shù)主要實現(xiàn)了2.2中所述算法,PHP實現(xiàn)代碼如下:
3.3 重定向過程
點擊短網(wǎng)址鏈接后,首先發(fā)出DNS查詢請求,得到域名www.short.t對應ip后,訪問到web服務器根目錄,再進行URL跳轉,這個過程由Apache偽靜態(tài)+PHP301重定向完成。
1. DNS服務器設置
DNS服務器搭建在虛擬機中的windows server 2003系統(tǒng)下,設置正向查找區(qū)域short.t,主機為www,對應ip地址為局域網(wǎng)短網(wǎng)址服務主機的ip。
2. Apache偽靜態(tài)設置
在Apache設置中開啟mod_rewrite功能,并在站點目錄下添加文件.htaccess,其中內容為:
即:當訪問短網(wǎng)址無法找到文件時,將重定向至redirect.php文件。
在redirect.php中,通過提取短網(wǎng)址的后綴,可以在數(shù)據(jù)庫中找到對應的長網(wǎng)址,跳轉至該URL完成訪問,其中關鍵代碼為:
采用黑盒測試方法,設計用例測試系統(tǒng)各功能。例如長短網(wǎng)址轉換功能測試結果如下:
圖5 長短網(wǎng)址轉換測試結果Fig.5 Test result of conversion from a long URL to a short URL
長網(wǎng)址被成功轉換為短網(wǎng)址,點擊短網(wǎng)址超鏈接可以跳轉至長網(wǎng)址指向網(wǎng)頁。
其他功能可以參照進行測試,結果證明系統(tǒng)功能完善,驗證了其可用性。
本文從短網(wǎng)址服務在實際中的應用出發(fā),研究了長短網(wǎng)址轉換的算法,對比了不同方法的優(yōu)缺點,并用MySQL+Apache+PHP實現(xiàn)了一個局域網(wǎng)短網(wǎng)址系統(tǒng),實現(xiàn)了長短網(wǎng)址轉換,短網(wǎng)址管理等功能。短網(wǎng)址服務在實際應用中還有很多實用的擴展功能,比如點擊量統(tǒng)計,自定義網(wǎng)址等[6],另外短網(wǎng)址在安全性上也存在一些值得研究的問題[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], 環(huán)球企業(yè)家, 2012, 12: 52-53
[5] Beiyeqingteng. 短址(short URL)原理及其實現(xiàn)[OL]. http:// blog.csdn.net/beiyeqingteng/article/details/7706010, 2012-07-01.
[6] 蔡岳峰. 網(wǎng)易短網(wǎng)址服務系統(tǒng)的設計與實現(xiàn)[D], 北京:北京交通大學, 2012.
[7] 成亦陳, 黃淑華. 惡意短鏈接欺騙的防護對策研究[J], 信息網(wǎng)絡安全, 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-),男,碩士研究生,主要研究方向:寬帶網(wǎng)技術。