1.短链接介绍
举个例子,现在我的博客地址是这个:https://blog.csdn.net/liwei128/article/details/91358071 (55个字符),我通过短链接服务可以将上面的地址转成http://m.c1n.cn (15个字符)
那我为什么要将原有的URL转成较短的链接呢?比如我们发短信提醒用户去XXX,XXX有优惠活动,在文案上往往会带有一个链接进行跳转,方便用户快速去到对应的活动落地页。而短信的发送是需要成本的,短信的成本主要有两方面组成:发送的人数(发的人越多,自然短信的花费就越大,这个我就不解释了)短信发送的字数(比如,文案总字数超过70个字,那就算两条短信计费,超过140个字就算三条短信计费)所以在发送短信给用户时:要么就投放更加精准优质的用户,以便控制好发送的数量,要么就尽可能控制文案的字数。显然,如果在短信上配上普通的URL,那真正的文案可写的字数就没多少了。于是我们可以发现,各大公司的短信推送的URL都是短链接。
比如在一些平台发布消息时会限制字数,如果我们的发的URL过长就很容易就被限制住了。
使用短链接的好处:短、字符少、美观、便于发布、传播。
2.行业内短网址实现方案
1.将长链接通过一定的“手段”生成一个短链接。
2.访问短链接时实际访问的是短链接服务器,然后根据短链接的参数找回对应的长链接
3.重定向跳转
实际核心要做的是怎么从http://m.c1n.cn类似这样的参数找到对应的完整URL:https://blog.csdn.net/liwei128/article/details/91358071现在业内用得比较多的是发号器(ID自增)+62进制编码:为什么要用62进制转换?62进制转换是因为62进制转换后只含数字+小写+大写字母。而64进制转换会含有/,+这样的符号(不符合正常URL的字符)10进制转62进制可以缩短字符,如果我们要6位字符的话,已经有560亿个组合了。
3.现有技术待改进的点
由于将链接缩短时使用的算法规则固定,无法实现短网址按需求进行自定义,比如我想指定将https://blog.csdn.net/liwei128/article/details/91358071缩短为http://c1n.cn/csdn便于记忆、美观性。
现有的短网址方案无法自定义三级域名,比如http://m.c1n.cn。
4.我技术方案
短网址生成算法不固定,采用随机生成字符串的形式。可以满足上述自定义短网址的需求。
具体步骤:
1.用户浏览器携带原网址请求短网址服务。
2.短网址服务随机生成字符串或者用户指定字符串,并将字符串和原网址的映射关系保存到数据库(字符串重复则重新生成->保存)
3.短网址服务将服务域名和生成的随机字符拼接成完整的url(即短网址)返回给浏览器
4.用户浏览器访问短网址,短网址服务从数据库查询到短网址中随机字符对应的原网址,然后告知浏览器重定向访问原网址。
5.用户浏览器访问原网址
5.本发明的技术方案(具体实现技术细节)
1. 如何实现访问被缩短的网址依然可以进入长网址
方案:在短网址服务器中将短网址合长网址的对应关系保存下来,用户访问短链接时实际访问的是短链接服务器,然后根据短链接的参数找回对应的长链接,然后重定向跳转。
2.使用随机字符作为短链接,如何解决短链接重复冲突的问题
方案:由于使用随机数实现,难免会出现短网址重复冲突的情况,虽然短网址使用6位字符,已经有560亿个组合了,但是依然无法保证绝对不冲突。我的处理方案是从数据库查询是否有重复的短网址,如果存在,在采用随机数再生成一次,然后再次判断重复性,直到不重复位置。当短网址生成数量过之后,重复的概率会增加,导致多次循环生成,影响性能,这时候可以考虑扩展短网址长度,增加一位字符,即可扩展至62倍的组合(大小写字母、数字一共62个)
3.如何自定义三级域名的短网址
方案:首先需要修改域名解析,将三级域名的A记录全部解析到短网址服务器。然后用户访问短链接时,服务器获取到三级域名的字符串,去数据库查找对应的长网址,进行重定向。
4.当原网址部分数据丢失时,如何提升访问的成功率
方案:https://www.bing.com/search?q=%s&PC=U316&FORM=CHROM 如该网址所示,url的组成结构一般为协议://域名(或者是网址)/端口或者是所要访问的服务器资源的路径;可以根据url的组成结构将url划分多个部分,例如,将url划分为协议部分、域名部分以及其他部分。用户可以自定义的短网址,或者服务器根据用户发送的请求随机生成的短网址,并建立短网址和初始url进行划分得到的url集合建立映射关系。当用户访问短网址时,将url集合中的各个部分按照预设规则进行拼接得到初始url,重新定向至初始url所指向的服务器以访问资源。
若由于url集合中的部分数据丢失时,例如,协议部分丢失,由于常见的协议有http和https,以及一些不常见的协议,例如:mailto: ftp:,可以对各种协议设置优先级,基于优先级逐一获取协议尝试还原初始url,当其他部分丢失时,可以只拼接协议部分和域名部分,通常情况下,协议部分和域名部分组成的url为访问首页目标网站的首页,用户在首页可以根据需要跳转至具体页面。
5.已实现的效果展示:C1N短网址
6.完整的短网址使用时序图