缩链分享:短链接实现原理——短链接六十二进制表示法
缩链收到投稿,是一位技术流用户,他要跟大家科普一下短链接的进制表示法,接下来我们一起看看他的思路吧!
最近购物比较多,收的短信也比较多,很多短信都包含了短链接,作为技术流,当然必须研究一下这个短链接产品。
可以看到上面的两条典型的短信,其中显示的网址都很短,和前些年的链接不一样,因为前些年的链接大概和一根挂面那么长。
好奇地点开了其中一条淘宝的短信,然后就跳转 到相应的活动页面了 。
可以看出来短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则是临时的。
所以短网址在平时站点搞活动或者分享页时应用比较多,微博、淘宝、微信基本上都是短网址。
短链接的安全性
虽然短链接便于传输和记忆,但是位数少并且无明确站点信息,容易出现猜测攻击和钓鱼攻击,比如一些黑基站发送短信,如果是短链接点开可能就跳转到非可信任网址,因此不建议使用短链接发送传输核心敏感数据,即使传输也要找顶级且知名的短链接厂家,并做好权限鉴别,加强安全处理,软件工程没有银弹,还是要辩证看待。
结语
本文并没有对如何保证短链接的唯一性 、 生成算法 、 鉴权 等进行详细介绍,仅做抛砖引玉,现实中有很多短链接服务商包括百度、缩链、三维推等,感兴趣的可以进行查阅。