前言
只有光頭才能變強。
文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
最近接了一個需求,涉及到了短鏈接的相關的知識,於是去查閱了相關的資料,在這里給大家整理分享一下。
我幫阿里雲推廣服務器89/年,229/3年,買來送自己,送女朋友馬上過年再合適不過了,買了搭建個項目給面試官看也香,還可以熟悉技術棧,(老用戶用家人賬號買就好了,我用我女朋友的😂)。掃碼或者點擊購買
一、短鏈接介紹
舉個例子,現在我的GitHub的地址是這個:https://github.com/ZhongFuCheng3y/3y
(36個字符)
我通過百度的短鏈接服務可以將上面的地址轉成https://dwz.cn/LwlrfG4j
(23個字符)
那我為什么要將原有的URL轉成較短的鏈接呢?比如我們發短信提醒用戶去XXX,XXX有優惠活動,在文案上往往會帶有一個鏈接進行跳轉,方便用戶快速去到對應的活動落地頁。
而短信的發送是需要成本的,短信的成本主要有兩方面組成:
- 發送的人數(發的人越多,自然短信的花費就越大,這個我就不解釋了)
- 短信發送的字數(比如,文案總字數超過70個字,那就算兩條短信計費,超過140個字就算三條短信計費)
所以在發送短信給用戶時:要么就投放更加精准優質的用戶,以便控制好發送的數量,要么就盡可能控制文案的字數。
顯然,如果在短信上配上普通的URL,那真正的文案可寫的字數就沒多少了。於是我們可以發現,各大公司的短信推送的URL都是短鏈接。
比如在一些平台發布消息時會限制字數,如果我們的發的URL過長就很容易就被限制住了:
使用短鏈接的好處:短、字符少、美觀、便於發布、傳播。
二、短鏈接它是怎么干的呢?
我們先回到生成好的短鏈上https://dwz.cn/LwlrfG4j
雖然這個鏈接看起來有點奇怪,但他終究還是一個鏈接,從URL的特征我們可以分出:
dwz.cn
是域名LwlrfG4j
是參數
我們在瀏覽器請求一下短鏈接看看是什么情況:
短鏈接的原理其實就是:
- 將長鏈接通過一定的
手段
生成一個短鏈接 - 訪問短鏈接時實際訪問的是短鏈接服務器,然后根據短鏈接的參數找回對應的長鏈接
- 重定向跳轉
2.1 核心的要解決的問題
通過上面的分析我們可以知道的是,我們實際核心要做的是怎么從LwlrfG4j
類似這樣的參數找到對應的完整URL:https://github.com/ZhongFuCheng3y/3y
腦子第一時間想到的是:能不能通過一個壓縮算法將https://github.com/ZhongFuCheng3y/3y
壓縮更小的字符?
顯然,不能,壓縮算法大多數都是針對大文本才奏效,本身的URL也不見得有多大...壓縮出來肯定比原來的URL還大。
腦子第二時間想到的是:能不能用Hash算法?還是不能,用Hash存在哈希碰撞的問題
- 什么是哈希碰撞?兩個不相同的字符串(值)進行Hash操作后,得到的哈希值相同。
- 這就意味着,兩個完全不同的長鏈得到的哈希值一模一樣,而我的短鏈是依賴哈希值去找到長鏈的(此時一個短鏈對應多個長鏈,這不合理)。
腦子第三時間想到的是?腦子想不到了。
現在業內用得比較多的是發號器(ID自增)+62進制編碼:
- 比如,我將
https://github.com/ZhongFuCheng3y/3y
看作是10000
,然后將10000
進行62進制編碼得到的結果是:2Bi
那我的短鏈URL就可以弄成https://3y.cn/2Bi
,其中3y.cn
是域名,2Bi
是經過62進制轉換后的參數。
為什么要用62進制轉換?64進制轉換倒是聽得多了
- 62進制轉換是因為62進制轉換后只含數字+小寫+大寫字母。而64進制轉換會含有
/
,+
這樣的符號(不符合正常URL的字符) - 10進制轉62進制可以縮短字符,如果我們要6位字符的話,已經有560億個組合了。
總結:
- ID自增后,轉成62進制,在DB保存映射關系,生成短鏈接
三、短信的鏈接直接跳轉到APP
以下內容來源:https://sq.163yun.com/blog/article/158315832059072512 ,作者:西西吹雪
綜合起來就是:
- 通過 Deep Links(iOS 則是Universal Links),可以實現點擊短信鏈接直接喚起 App;
- 如果系統因為各種原因不支持 Deep Links,備選方案是
intent filter
,不過會出彈框讓用戶選擇用哪個 App 打開鏈接; - 如果用戶沒有選擇我們的 App 而是選擇了瀏覽器打開,則通過
自定義 scheme
嘗試喚起 App; - 由於技術和成本問題,我們忽略不支持
自定義 scheme
的瀏覽器。
最后
這篇文章主要是簡單了解一下短鏈接的相關知識,一個完備的短鏈服務肯定還要考慮更多的事,這里我就不展開了(畢竟我也沒真正寫過,可以在下方的鏈接繼續學習)~
更多資料查閱:
- https://www.zhihu.com/question/29270034/answer/46446911
- https://hufangyun.com/2017/short-url/
- https://blog.csdn.net/c10WTiybQ1Ye3/article/details/78098840
本已收錄至我的GitHub精選文章,歡迎Star:https://github.com/ZhongFuCheng3y/3y
樂於輸出干貨的Java技術公眾號:Java3y。公眾號內有300多篇原創技術文章、海量視頻資源、精美腦圖,關注即可獲取!
非常感謝人才們能看到這里,如果這個文章寫得還不錯,覺得「三歪」我有點東西的話 求點贊 求關注️ 求分享👥 求留言💬 對暖男我來說真的 非常有用!!!
創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!