今天無意中看到一個名詞--"短鏈接",一開始以為就是我們平時所說的http短連接,后來一查完全不是一回事。我們平時所說的短連接對標的概念是http長連接,指在http相應返回后就關閉http連接。而短鏈接的概念是指:將原本冗長的URL做一次“包裝”,變成一個簡潔可讀的URL。
今天這邊博客就來具體講下短鏈接的具體概念,為什么需要使用短連接以及短連接生成的方式。

什么是短鏈接
比如說我之前有個URL如下:
https://mp.weixin.qq.com/s__biz=MzA5NDI5NDI3Nw==&mid=2649497809&idx=2&sn=381d02312b0c49e9cc406436f963efc5&chksm=884858bbbf3fd1ad6f431e94ca9dd0543d817a3856bf857807cb088dda9b9aa855720d4177eb&mpshare=1&scene=23&srcid=1012SKaGEy75jnX0omALmfx1#rd
這個URL很長,而且不易於閱讀。我現在通過某種方式將上面的URL轉義成:
http://url.cn/5MMEX3D
當我們訪問<http://url.cn/5MMEX3D>時,和訪問最初的URL效果是一樣的。那么http://url.cn/5MMEX3D就叫做原始連接的短鏈接。
為什么使用短鏈接
節省發送的內容
我們平時發微博或者短信是都是有最大字符限制的。如果你的一個URL太長,一個URL占用的字符數就已經超過了最大限制,根本發不出去。如果你細心觀察過銀行的信用卡中心給你發過來的活動短信的話,你會發現短信中的URL好多都是以短鏈接形式發送的。
提升用戶體驗
還是以上面的URL為列子。這一大串URL非常不美觀,給人的感覺就是木馬鏈接,用戶可能都不會去點擊。相反的,如果轉換成http://url.cn/5MMEX3D,就非常易於閱讀,看起來整潔干凈,提高用戶體驗和點擊率。
便於鏈接追蹤,分析點擊來源
通過短鏈接可以獲知大部分用戶的來源,和來源渠道的轉化率、廣告渠道的質量。通過渠道效果對比數據,更合理的進行廣告投放和資源配置。
同一個頁面不同的鏈接
每個用戶需要推送帶參數的唯一鏈接。
一定程度上保護原始網站鏈接
我們在玩Facebook,領英等社交時,有些需要分享一些帶有我們網站鏈接的帖子和消息,尤其對於小白來說,如果發的內容次數過多,並且毫無互動可言或者直接被人舉報多次,那么你的網址就會被社交平台標記,一旦標記,鏈接權重就會受影響,后面再投社交廣告時就有麻煩了。
但是如果我們使用短鏈接就不會影響原始網站。
短鏈接生成平台
網上有很多短鏈接生成平台,下面列舉幾個:
還有許多其他小平台和私人搭建的平台,建議大家使用大廠的平台。
短鏈接生成原理
還是以剛剛的短鏈接http://url.cn/5MMEX3D為列子。當我們訪問這個鏈接的時候我們先訪問到url.cn對應的服務器,然后根據參數5MMEX3D找出它對應的原始連接,再重定向到這個原始鏈接上去。
短鏈接工作的原理非常簡單,其中的關鍵點就是怎么將5MMEX3D和原始鏈接進行映射?下面引用下這篇博客總結的短鏈接實現方案。
可能的方案有以下幾種:
- 腦子第一時間想到的是:能不能通過一個壓縮或者編碼算法將長鏈接壓縮更小的字符?顯然,不能,壓縮算法大多數都是針對大文本才奏效,本身的URL也不見得有多大...壓縮出來肯定比原來的URL還大。
- 腦子第二時間想到的是:能不能用Hash算法?還是不能,用Hash存在哈希碰撞的問題。這個場景是不允許有碰撞的。
其實現在業內比較流行的做法是:發號器(ID自增)+62進制編碼。比如,我將https://github.com/ZhongFuCheng3y/3y這個長鏈接看作是10000,然后使用進制轉換工具將10000進行62進制編碼得到的結果是:2Bi,那么我們就可以得到一個短鏈接http://url.cn/2Bi。

為什么要用62進制轉換?64進制轉換倒是聽得多了
- 62進制轉換是因為62進制轉換后只含數字+小寫+大寫字母。而64進制轉換會含有/,+這樣的符號(不符合正常URL的字符)
- 10進制轉62進制可以縮短字符,如果我們要6位字符的話,已經有560億個組合了。

