louzhedong / blog

前端基础,深入以及算法数据结构

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

短链接原理

louzhedong opened this issue · comments

短链接系统实现原理

如果你在工作中做过活动页,或者需要生成二维码时,不知是否遇到过这样的情况:活动的URL上会带上许多参数,导致URL会非常长,这时候生成二维码会使得二维码非常的密集,识别率也会下降,直接分享URL也会显得很复杂。这个时候,你就需要用到短链接了。

短链接:即将普通网址,转换成比较短的网址,类似http://dwz.cn/ABC23D 这种。

原理解析

当我们访问http://dwz.cn/ABC23D这个地址时:

  1. DNS首先会解析http://dwz.cn的IP地址
  2. 当获得IP地址后,会向地址发送HTTP GET请求,查询短码ABC23D
  3. 服务器通过短码获取对应的真实URL
  4. 通过301或302重定向到真是URL
算法实现

算法一:自增序列算法

设置ID自增,一个十进制的ID转化为62进制的数值

由于短链接是短码每一位都由[a - z, A - Z, 0 - 9]组成,总共有62个符号,如果短链接的长度为6位,总共有62^6 ~= 568亿中组合。

但直接这样生成的短码会有一定的规律,可能会不安全,解决办法是将62个字符的顺序打乱。

算法二
  1. 将长网址md5生成32位签名串,分为4段,每段8个字节
  2. 对这四段循环处理,取8个字节,将它看成16进制与0x3fffffff(30位1)与操作,即超过30位的忽略处理
  3. 将这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次获取6位字符串
  4. 总的md5串可以获得4个6位串,取里面的任意一个就可以作为这个长url的短url地址
对比

第一种算法简单好理解,永不重复,但是短码的长度不固定

第二种算法存在一定的碰撞几率