全網最通俗易懂的【短連結】入門

Java3y發表於2019-11-27

前言

只有光頭才能變強。

文字已收錄至我的GitHub倉庫,歡迎Star:github.com/ZhongFuChen…

最近接了一個需求,涉及到了短連結的相關的知識,於是去查閱了相關的資料,在這裡給大家整理分享一下。

我幫阿里雲推廣伺服器89/年,229/3年,買來送自己,送女朋友馬上過年再合適不過了,買了搭建個專案給面試官看也香,還可以熟悉技術棧,(老使用者用家人賬號買就好了,我用我女朋友的?)。掃碼或者點選購買

全網最通俗易懂的【短連結】入門

搭建教程,從0開始一步一步帶你搭建?

一、短連結介紹

舉個例子,現在我的GitHub的地址是這個:https://github.com/ZhongFuCheng3y/3y (36個字元)

我通過百度的短連結服務可以將上面的地址轉成https://dwz.cn/LwlrfG4j(23個字元)

轉短連結

那我為什麼要將原有的URL轉成較短的連結呢?比如我們發簡訊提醒使用者去XXX,XXX有優惠活動,在文案上往往會帶有一個連結進行跳轉,方便使用者快速去到對應的活動落地頁。

而簡訊的傳送是需要成本的,簡訊的成本主要有兩方面組成:

  1. 傳送的人數(發的人越多,自然簡訊的花費就越大,這個我就不解釋了)
  2. 簡訊傳送的字數(比如,文案總字數超過70個字,那就算兩條簡訊計費,超過140個字就算三條簡訊計費)

所以在傳送簡訊給使用者時:要麼就投放更加精準優質的使用者,以便控制好傳送的數量,要麼就儘可能控制文案的字數。

顯然,如果在簡訊上配上普通的URL,那真正的文案可寫的字數就沒多少了。於是我們可以發現,各大公司的簡訊推送的URL都是短連結

短連結案例之一

比如在一些平臺釋出訊息時會限制字數,如果我們的發的URL過長就很容易就被限制住了:

限制字數

使用短連結的好處:短、字元少、美觀、便於釋出、傳播

二、短連結它是怎麼幹的呢?

我們先回到生成好的短鏈上https://dwz.cn/LwlrfG4j

雖然這個連結看起來有點奇怪,但他終究還是一個連結,從URL的特徵我們可以分出:

  • dwz.cn是域名
  • LwlrfG4j是引數

域名

我們在瀏覽器請求一下短連結看看是什麼情況:

302跳轉

短連結的原理其實就是:

  • 將長連結通過一定的手段生成一個短連結
  • 訪問短連結時實際訪問的是短連結伺服器,然後根據短連結的引數找回對應的長連結
  • 重定向跳轉

大致原理圖

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億個組合了。

6位字元

總結:

  • ID自增後,轉成62進位制,在DB儲存對映關係,生成短連結

短連結過程

三、簡訊的連結直接跳轉到APP

以下內容來源:sq.163yun.com/blog/articl… ,作者:西西吹雪

綜合起來就是:

  • 通過 Deep Links(iOS 則是Universal Links),可以實現點選簡訊連結直接喚起 App;
  • 如果系統因為各種原因不支援 Deep Links,備選方案是 intent filter,不過會出彈框讓使用者選擇用哪個 App 開啟連結;
  • 如果使用者沒有選擇我們的 App 而是選擇了瀏覽器開啟,則通過 自定義 scheme 嘗試喚起 App;
  • 由於技術和成本問題,我們忽略不支援 自定義 scheme 的瀏覽器。

簡訊連結喚醒APP

最後

這篇文章主要是簡單瞭解一下短連結的相關知識,一個完備的短鏈服務肯定還要考慮更多的事,這裡我就不展開了(畢竟我也沒真正寫過,可以在下方的連結繼續學習)~

更多資料查閱:

本已收錄至我的GitHub精選文章,歡迎Stargithub.com/ZhongFuChen…

樂於輸出乾貨的Java技術公眾號:Java3y。公眾號內有300多篇原創技術文章、海量視訊資源、精美腦圖,關注即可獲取!

轉發到朋友圈是對我最大的支援!

非常感謝人才們能看到這裡,如果這個文章寫得還不錯,覺得「三歪」我有點東西的話 求點贊 求關注️ 求分享? 求留言? 對暖男我來說真的 非常有用!!!

創作不易,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

相關文章