5

缩我:短链接实现原理——短链接六十二进制表示法

 2 years ago
source link: https://suowo.cn/cms/class/29854.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

缩我收到投稿,是一位技术流用户,他要跟大家科普一下短链接的进制表示法,接下来我们一起看看他的思路吧!

短链接

最近购物比较多,收的短信也比较多,很多短信都包含了短链接,作为技术流,当然必须研究一下这个短链接产品。

可以看到上面的两条典型的短信,其中显示的网址都很短,和前些年的链接不一样,因为前些年的链接大概和一根挂面那么长。

好奇地点开了其中一条淘宝的短信,然后就跳转 到相应的活动页面了 。

可以看出来短ID和短网址在生活中是普遍出现的,作用也非常明显,比如微博这种有140字限制的,粘贴一个链接可能花掉了100个字;

对于推广商发送短信按照字数计费,同样的长网址进行相同数量的推广,产生的通信费可能是短网址的数倍。

综上可知,短网址和短ID相当于间接提高了带宽的利用率、节约成本。

短链接六十二进制表示法

顾名思义短网址就是非常短的网址,比如http://xxx.cn/EYyCO9T,其中核心的部分EYyCO9T只有7位长度。

其实这里的7位长度是使用62进制来表示的,就是常用的0-9、a-z、A-Z,也就是10个数字+26个小写+26个大写=62位。

那么7位长度62进制可以表示多大范围呢?

62^7 = 3,521,614,606,208(合计3.5万亿),这样的话只要算法得当,短网址冲突的概率就很低了。

至于短网址的长度可以根据自己需要来调整,即使6位长度62^6也能达到568亿的范围,所以回答了上面快递单号的问题。

如果有弱加密需求,不想让人明确知道转换前是什么,使用方可以按照自己的需求来调整62进制各位代表的含义,比如A站点将字母c表示32、B站点将字母c表示60,就相当于密码本了。

更大进制表示法

看到这里你或许会说,使用108进制(如果有的话)岂不是网址更短,是的,但是108个进制就可能会出现大量的不常用字符 比如 # % & * 这些,通用性和记忆性就变差了,62进制是个权衡折中,已经足够无需过设计。

关于跳链

当打开淘宝的短网址时页面出现了跳转,出现了新的页面,浏览器显示的新网址并不是你打开的短网址了,也就是发生了301/302跳转。

301的意思简单来说就是永久重定向,A对B做了重定向,那么点B会跳到A,且是永久性的,也就是短网址和长网址是一一对应的,302则是临时的。

所以短网址在平时站点搞活动或者分享页时应用比较多,微博、淘宝、微信基本上都是短网址。

短链接的安全性

虽然短链接便于传输和记忆,但是位数少并且无明确站点信息,容易出现猜测攻击和钓鱼攻击,比如一些黑基站发送短信,如果是短链接点开可能就跳转到非可信任网址,因此不建议使用短链接发送传输核心敏感数据,即使传输也要找顶级且知名的短链接厂家,并做好权限鉴别,加强安全处理,软件工程没有银弹,还是要辩证看待。

结语

本文并没有对如何保证短链接的唯一性 、 生成算法 、 鉴权 等进行详细介绍,仅做抛砖引玉,现实中有很多短链接服务商包括百度、缩我、三维推等,感兴趣的可以进行体验。

短链接


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK