前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

最近接了一个需求,涉及到了短链接的相关的知识,于是去查阅了相关的资料,在这里给大家整理分享一下。

一、短链接介绍

举个例子,现在我的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

以下内容来源:

https://sq.163yun.com/blog/article/158315832059072512

作者:西西吹雪

综合起来就是:

  • 通过 Deep Links(iOS 则是Universal Links),可以实现点击短信链接直接唤起 App;

  • 如果系统因为各种原因不支持 Deep Links,备选方案是 intent filter,不过会出弹框让用户选择用哪个 App 打开链接;

  • 如果用户没有选择我们的 App 而是选择了浏览器打开,则通过 自定义 scheme 尝试唤起 App;

  • 由于技术和成本问题,我们忽略不支持 自定义 scheme 的浏览器。

短信链接唤醒APP

最后

这篇文章主要是简单了解一下短链接的相关知识,一个完备的短链服务肯定还要考虑更多的事,这里我就不展开了(毕竟我也没真正写过,可以在下方的链接继续学习)~

更多资料查阅:

  • https://www.zhihu.com/question/29270034/answer/46446911

  • https://hufangyun.com/2017/short-url/

  • https://blog.csdn.net/c10WTiybQ1Ye3/article/details/78098840

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

最近学到的「短链接」知识相关推荐

  1. notion自建服务器,【速报】Notion的特色「双向链接」方案来了,Synced Block 登场...

    Notion 作为一款出色的「聚合型」(All-In-One)笔记 App,在这几年里逐渐获得了不少知识工作者的宠爱. 在以前,大家一般会高度赞扬 Notion 的「模块化」编辑器,但同时也会好奇什么 ...

  2. 产业互联网:补齐互联网的「短板」,重启互联网的「进化」

    尽管在互联网时代出现了诸多的乱象,但是,我们依然无法否认互联网时代给人们的生产和生活带来的影响和改变.即使如此,我们依然无法否认互联网本身其实是存在着诸多的问题和弊病的,这些问题和弊病所导致的一个最为 ...

  3. 的标题形状工具在哪里_一分钟教你做一款让人眼前一亮的标题!你想学吗?「Word技巧」...

    在日常编辑文档的时候,通常都会在文档页眉处添加标题,相信添加标题都难不倒小伙伴,今天我们来学习制作不一样的标题:侧边标题. 侧边标题效果图 平时添加标题是直接在页眉处添加,这侧边页码怎么制作呢?其实, ...

  4. 学弟想「白嫖」优质大学课,姐直接甩给他 8 个网站

    橡皮擦,一个逗趣的互联网高级网虫. 3 月份,315 晚会直播前 聊天记录来自某群聊 学弟问:擦姐,你有没有 985,211 大学老师讲的课呀? 擦姐:没空,问你擦哥去,他个大闲人. 学弟:擦姐,昨天 ...

  5. 学3DMAX之前「明确方向」学3DMAX想应用于哪些方面?

    首先要有一本好书.所谓的好书并不是里面贴出来的图片好看,场景大就好了,也不是越厚越好.现在市面上的书多如牛毛,有些也很垃圾.对于初学者来说,应该选择一些介绍简单实例制作的书,在实例制作中消化和掌握命令 ...

  6. entity什么类型_「知否」知识地图和知识图谱是什么?

    不问不知,不学不成.知识管理"知否"? 精短解答,轻松和你踏上知识管理进阶之路.今日知否:知识地图和知识图谱是什么? 问题: 经常听到知识地图和知识图谱?是一回事情吗?分别是什么? ...

  7. delphi 执行长时间存储过程 显示进度_项目管理_十大管理体系之「项目进度管理」知识整理及心得分享...

    项目进度管理 项目进度管理在项目是项目管理三大要素之一,在项目管理中占有非常重要的地位.往往很多项目要求进度节点是一个固定期限,无法修改,所以进度把控就显得尤为重要.什么是进度管理,在你写projec ...

  8. 小师弟肝了七天七夜,东半球最全「后台开发」学习路线出炉

    点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 来源:编程指北 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. ...

  9. selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了

    如今,网上流传着一句话:「五年没考过执医,就不要出来为祸人间了」但事实上,有很多同学,并不是不适合这条路,而是不知道如何学习前段时间,20 年的执医考试分数出了.看到很多人在丁香论坛分享自己的学习方法 ...

最新文章

  1. Redis分布式锁奥义
  2. DevOps落地成不成,关键不在持续集成?
  3. java random array_java復習之Math、Random、Arrays工具類
  4. Batch批量替换hosts
  5. 下载丨9月数据库技术通讯:Redo日志丢失,重建遭遇ORA-16433处理
  6. smali-2.2.4.jar baksmali-2.2.4.jar
  7. 辞职腾讯去了小公司,从0到1搭建后端架构,工资就翻倍了
  8. 服务器虚拟化的毕业设计,云桌面技术研究与应用毕业设计论文+开题报告+翻译+源码...
  9. 如何学习ERP系统并从事相关职业?
  10. Git系列教程(一)——git版本管理
  11. Python判断一个数是否为质数
  12. 神木林服务器未能,《梦幻西游2》2015年9月22日定期维护公告
  13. Linux系列八-type、alias与history
  14. AVR单片机的BOOT区
  15. C# winform Qrcoder二维码
  16. 技能提升之word中如何优雅的输入根号3
  17. 一只纯白小菜鸡是如何走上嵌入式学习这条道路的
  18. Java - 反射机制
  19. Eclipse中properties配置文件的中文乱码
  20. 软件架构-解密电商系统营销-会员模块业务

热门文章

  1. 计算机防火墙不能更改,win7系统更新防火墙设置不能更改的解决方法
  2. Pixel6 解锁bootloader
  3. 红黑树的删除_红黑树
  4. vue引用electron_如何搞定跨平台桌面开发?Electron助你快速起步
  5. Ubuntu 20.04更换下载源阿里云
  6. apache apr介绍
  7. Windows 服务程序编写
  8. golang 接口类型 interface 简介使用
  9. Python 中@符号解释
  10. 收藏 eclipse 最常用的10个快捷键