短链接原理
louzhedong opened this issue · comments
短链接系统实现原理
如果你在工作中做过活动页,或者需要生成二维码时,不知是否遇到过这样的情况:活动的URL上会带上许多参数,导致URL会非常长,这时候生成二维码会使得二维码非常的密集,识别率也会下降,直接分享URL也会显得很复杂。这个时候,你就需要用到短链接了。
短链接:即将普通网址,转换成比较短的网址,类似http://dwz.cn/ABC23D 这种。
原理解析
当我们访问http://dwz.cn/ABC23D这个地址时:
- DNS首先会解析http://dwz.cn的IP地址
- 当获得IP地址后,会向地址发送HTTP GET请求,查询短码ABC23D
- 服务器通过短码获取对应的真实URL
- 通过301或302重定向到真是URL
算法实现
算法一:自增序列算法
设置ID自增,一个十进制的ID转化为62进制的数值
由于短链接是短码每一位都由[a - z, A - Z, 0 - 9]组成,总共有62个符号,如果短链接的长度为6位,总共有62^6 ~= 568亿中组合。
但直接这样生成的短码会有一定的规律,可能会不安全,解决办法是将62个字符的顺序打乱。
算法二
- 将长网址md5生成32位签名串,分为4段,每段8个字节
- 对这四段循环处理,取8个字节,将它看成16进制与0x3fffffff(30位1)与操作,即超过30位的忽略处理
- 将这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次获取6位字符串
- 总的md5串可以获得4个6位串,取里面的任意一个就可以作为这个长url的短url地址
对比
第一种算法简单好理解,永不重复,但是短码的长度不固定
第二种算法存在一定的碰撞几率