说到短链接,可能都会觉得很陌生,那么我们先来一张截图,以下是一条短信的截图,是蝈蝈自己收到的短信:
上图中的网址就是短连接,大家可以翻翻自己的短信,是否有收到类似的。今天蝈蝈跟大家讲讲短链接一些深层次的东西,包括它的特点、作用及实现原理等。
一、特点
短链接最明显的特点就是简短,一般域名只有3-4个字符组成,前面不会带http和https,后面一般就是6位字符组成,字符包括数字和字母。
二、作用
短链接有什么作用?
1、缩短内容
大家都知道,一条短信最多发70个文字,超过70个文字,运营商会自动按两条短信来发送,同时收取两条短信的费用,对于做渠道推广的人员来说,这个成本是翻倍的,采用短链接,可以缩短短信中带的超链接的长度,从而缩短内容。
2、隐藏原始网站地址
有的网站为了隐藏自己网站的网址,就会采用短链接的形式去推广。
3、降低推广二维码的复杂度
也许大家不知道,我们经常的扫的二维码,其实是有复杂度的,生成二维码内容越多,复杂度越高,用户扫起来,就会觉得很慢,很难识别。内容少,复杂度就低,识别起来就越快。
二维码示例1
二维码示例2
以上是两个不同复杂度的二维码,很明显,第一张二维码比第二张更复杂,大家可以尝试识别扫一下,看看蝈蝈在里面写了什么东西,蝈蝈写了一段话在里面,图一因为内容有差不多上百个字,所以显得很复杂,如果是用二维码做推广,那么用短链接生成二维码就很有必要了!
三、实现原理
接下来就要讲解如何实现短链接了,这一部分是本文的精华所在,内容比较丰富哦!
下面我们先来了解一下,我们访问一个短链接时,服务器发生了什么,程序上做了哪些操作。整个过程如下:
1、用户访问短链接,假如短链接为:http://xyz.cn/abcdef
2、用户访问到http://xyz.cn这服务器,上面写了程序,程序会接收到 abcdef 这一串字符串
3、程序通过查找数据库或者缓存,找到abcdef对应的原始网址
4、程序自动将网页跳转到原始网址
以上步骤,完成了从访问短链接到跳转至原始网址的整个流程。
接下来,就来说说一个完整的实现方法,包括程序设计。从上面的过程中,我们可以看到,整个流程分为两步:域名解析、程序解析字符串并跳转。
(1)域名解析
这个简单,自己去注册好一个简短的域名,一般2-4个字符串,不要太多,不然就达不到短链的效果了,注册好域名之后,需要购买一台服务器,域名备案,然后把域名解析到服务器上,并在服务器上搭好程序运行的环境,对域名对解析映射。这些太专业,就不一一图解了。
(2)程序实现
假如蝈蝈我要将自己的一样网址转为短链,假设
网址为(A):https://diannao.k3v3.com/home/download/peizhi
短链网站为(B):http://xyz.cn
那么我在http://xyn.cn提交生成短链请求后,程序将做一下事情:
1、将提交的网址 A 进行MD5加密,生成一串32位的字符串:8242130a4e403314d9402ae39b57f8bc,我们标记为C
2、从数据库里或者缓存里,查询C是否已经生成过对应的短链接编码。如果有,直接就取之前生成过的短链接编码,也就是前面我们说到的6-7位的字符串abcdef;如果没有,则往数据库插入一条记录,记录的内容如下:
如上图,如果通过8242130a4e403314d9402ae39b57f8bc来查询,我们可以查到有一条记录,那么我们直接把图中的链接码0002bI,组成短链接:http://xyz.cn/0002bI 即可。用户访问短链接时,我们可以获取到 0002bI 这一串字符,通过查找数据库,可以找到对应的原始网址,然后程序跳转到原始网址即可,就是这么简单。
3、第2步中,如果不存在md5码对应的网址,意思就是说,这个网址是第一个来生成短链接,那么我们就要插入一条记录,插入一条记录,主要需要插入3部分内容:md5_code(加密后的md5码)、code(短链code)、url(原始网址),3部分内容,一起我们有两部分了,就剩下短链code这一部分内容了,这一部分内容也就是最最关键的,这个怎么得出来的呢?
问大家一个问题,如果一张数据表中,出现两个相同的code会怎么样?答案是,当用户访问短链时,我们通过短链码会取到两个对应的原始网址,这时候,服务器就不知道应该跳转到那个网址了,这就会出错了!所以,短链code的要求是:必须唯一的,不会重复的,简短。
怎么样才能满足上述要求呢?
这时,聪明的程序员就会采用多进制的方式来实现这个编码的生成。
下面简单介绍一下多进制,我们日常生活中用的最多的是10进制,即满10进1,计算机常用的是2进制,满2进制,还有8进制、16进制、32进制、62进制等等。举个例子:
10进制中的3用2进制表示即为11;
10进制中的20用2进制表示即为10100;
10进制中的20用8进制表示即为24;
那么我们说的编码怎么来生成呢?
由于短链网站是提供给全网民用的,所以日后的量会特别大,假如有10亿条短链,我们该怎么生成这个短链码,并保证简短唯一呢?我们常用的是36进制和62进制,众所周知,我们的键盘上有0-9a-z这么多字符串,一共36个字符。36进制中,1亿就可以使用 1NJCHS 这6个字符串来表示了。62进制中,1亿就可以用 06laZE 来表示了,进制之间的换算,大家可以参考下文:
以上多进制方式,可以帮我们生成短链码,接下来的操作就很简单了,一个新的网址提交上来,要生成短链,我们判断没有生成过短链后,直接王数据库添加一条记录,这时会得到一个自增的id,比如是100000000,这时候,我们通过62进制,将1亿转换成62禁止,得到短链码 06laZE,然后组成一个完整的短链即可。用户访问短链接时,我们得到了短链码06laZE,又可以通过将62进制转成10进制,得到数字1亿,从而可以找到数据库中这条唯一的数据,然后跳转到对应的url原始网址即可。
关于短链接的秘密都讲完了,有兴趣的可以通过suolink.cn测试体验一下生成短链接的功能,有问题也可以找蝈蝈交流。