聊聊關於短鏈接那些事

2022.09.16
聊聊關於短鏈接那些事

由於開源項目存在不確定性,不得不自己搭建一套短鏈接服務,滿足使用需求。一是便於維護,二是可以靈活擴展。接下來結合代碼進行分析。

​前言

最近在做一套推廣系統,將其中涉及的長短鏈接問題在這里分享一下。推廣方式主要是以短信方式慰問客戶並推送宣傳鏈接(非廣告),但鏈接真的是太長了,先不說短信按字數收費問題,就是看到就想立刻刪除。所以組織就安排研究如何讓鏈接變短,精簡幹練。。。

關於長短鏈接

  • 長鏈接:顧名思義,就是網頁的完整URL地址,點擊即可跳轉至網頁,進行內容瀏覽。
  • 短鏈接:就是將長鏈接進行處理後轉換成長度較小的URL地址,如https://sourl.cn/upNbxj 則是長鏈接 https://blog.csdn.net/qq_39486758/article/details/126602389 處理之後的結果。
  • 短鏈接相較於長鏈接,會更簡短,便於一些第三方平台的字符長度限制等問題處理,當然對於小編來說,可以省下不少短信費用,能不能“升官發財”就靠它了~~

長短鏈接原理

  • 當我們在網站輸入短鏈接後,DNS會解析鏈接的ip地址(即短鏈接服務器),然後DNS轉發請求(HTTP GET)至短鏈接服務器,通過短鏈接碼換取對應的完整URL地址,最後短鏈接服務器通過請求(HTTP 301)重定向到完整URL地址,至此完成解析。可以參考時序圖:

圖片

注:短鏈接跳轉長鏈接可以採用301(永久重定向),也可以採用302(臨時重定向),區別就是對資源的管理,301會將舊資源永久移除,替換為重定向的新資源;而302還是會保留舊資源,只是重定向到新資源,並不會發生替換,也不會保存新資源。

演示案例

  • 免費的在線工具:

站長之家:https://tool.chinaz.com/tools/dwz.aspx,需要註冊才能使用,畢竟是白嫖的,還是得尊重下~~

短網址:https://www.dwz.lc/,其中提供了設置有效期,訪問密碼等非常完善的功能,使用便捷

  • 自研短鏈接服務:由於開源項目存在不確定性,不得不自己搭建一套短鏈接服務,滿足使用需求。一是便於維護,二是可以靈活擴展。接下來結合代碼進行分析。

首先是生成短鏈接碼的算法工具類,算法不是固定的,可以根據自己習慣或工作要求使用其它的算法生成,最主要是保證短鏈接碼的唯一性。然後就是維護短鏈接的關係映射,此處小編採用的是集合變量,建議採用Mysql等數據庫將關係數據持久化,避免數據丟失,導致訪問失敗。

/**
     * 解码重定向
     *
     * @param url 原始链接的编码
     * @return 重定向
     */
    @GetMapping("/redirect/{url}")
    public ModelAndView redirect(@PathVariable String url) {
        long id = BasetUtil.encode62to10(smartUrl);
        String originUrl = urlMap.get(id);
        RedirectView redirectView=new RedirectView(originUrl);
        // 301永久重定向,避免网络劫持
        redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
        return new ModelAndView(redirectView);
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

模擬操作過程:本地啟動短鏈接服務,再啟動一個業務服務作為長鏈接服務,將長鏈接生成短鏈接,然後訪問短鏈接並成功跳轉至長鏈接地址。演示結果

圖片

圖片

圖片

總結

以上就是本文所分享的全部內容,當然不止這一種實現方式,有想法的小伙伴可以私信探討。