新浪短网址:https://sina.lt/
百度短网址: http://dwz.cn/ , goog也有。
短网址: 由一个长网址转换而来,可以利用改短网址访问原网址。例如,http://t.cn/xx1xx 这种在微博这些限制字数的应用里,便于发布、传播。
原理:
当在浏览器里输入http://t.cn/xx1xx 时
DNS(域名系统服务)首先解析获得 http://t.cn 的 IP
地址, 当 DNS
获得 IP
地址以后(比如:112.125.225.172),会向这个地址发送 HTTP
GET
请求,查询短码 RlB2PdD
http://t.cn 服务器会通过短码 RlB2PdD
获取对应的长 URL
通过 HTTP
301
转到对应的长 URL https://m.helijia.com 。
算法实现
网上比较流行的算法有两种 自增序列算法、 摘要算法
算法一
自增序列算法 也叫永不重复算法
设置 id 自增,用62进制表示这个id,1对1,也就不会出现重复的情况。这个利用的就是低进制转化为高进制时,字符数会减少的特性。如下图:十进制 10000,对应不同进制的字符表示。
短址的长度一般设为 6 位,而每一位是由 [a - z, A - Z, 0 - 9]
总共 62 个字母组成的,所以 6 位的话,总共会有 62^6 ~= 568亿种组合,基本上够用了。
@@进制转换工具 http://tool.lu/hexconvert/
算法二
- 将长网址
md5
生成 32 位签名串,分为 4 段, 每段 8 个字节 - 对这四段循环处理, 取 8 个字节, 将他看成 16 进制串与 0x3fffffff(30位1) 与操作, 即超过 30 位的忽略处理
- 这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串
- 总的
md5
串可以获得 4 个 6 位串,取里面的任意一个就可作为这个长 url 的短 url 地址
这种算法存在重复几率。
md5: https://www.zhihu.com/topic/19619705/hot
Ref:
https://segmentfault.com/a/1190000012088345
https://hufangyun.com/2017/short-url/