短链接生成原理

44a3912ec7935c95d863638856c32aa8.png

相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计,第二个特点是链接很短,比如下面这个:

794b598bf264fdf9dca931567b846d47.png

我们知道,短信有些是有字数限制的,直接放一个带满各种参数的链接,不合适,另外一点是,不想暴露参数。好处无非以下:

太长的链接容易被限制长度

短链接看着简洁,长链接看着容易懵

安全,不想暴露参数

可以统一链接转换,当然也可以实现统计点击次数等操作那背后的原理是什么呢?怎么实现的?让你实现这样的系统,你会怎么设计呢?

整个跳转的流程:

1.用户访问短链接,请求到达服务器

2.服务器将短链接转换成为长链接,然后给浏览器返回重定向的状态码301/302

301永久重定向会导致浏览器缓存重定向地址,短链接系统统计访问次数会不正确

302临时重定向可以解决次数不准的问题,但是每次都会到短链接系统转换,服务器压力会变大。

3.浏览器拿到重定向的状态码,以及真正需要访问的地址,重定向到真正的长链接上。

实现一个算法,将长地址转成短地址。实现长和短一一对应。然后再实现它的逆运算,将短地址还能换算回长地址。

比较烂的回答有随机生成一个短地址,去查找是否用过,用过就再随机,如此往复,直到随机到一个没用过的短地址。

上面是典型的错误回答,下面咱们直接说正确的原理。正确的原理就是通过发号策略,给每一个过来的长地址,发一个号即可,小型系统直接用 mysql 的自增索引就搞定了。如果是大型应用,可以考虑各种分布式 key-value 系统做发号器。不停的自增就行了。

总结

当我们在浏览器里输入 https://url.cn/5fslXqH 时

DNS首先解析获得 https://url.cn 的 IP 地址

当 DNS 获得 IP 地址以后(比如:127.0.0.1),会向这个地址发送 HTTP GET 请求,查询短码 5fslXqH

https://url.cn 服务器会通过短码 5fslXqH 获取对应的长 URL

请求通过 HTTP 301 转到对应的长 URL https://github.com/zgpeace/geekTimeQrcode。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值