短网址的生成算法
Ⅰ 短链接服务搭建
关键词:长链接;短链接;重定向;
长链接问题:
复制容易出错,长链接URL较长,有时参数不止一个,复制容易遗漏或在粘贴时被编辑器截断;
容易被屏蔽,绝大部分长链接暴露了资源来源及分配策略,在投放第三方时容易被屏蔽,比如被短信屏蔽,(淘宝宝贝长链接)被微信屏蔽......;
反例:
因此,我们考虑短链接服务对长链接进行压缩,跳转替代!
1、用户访问短链接: https://0x9.me/QvjlI ;
2、短链接服务器0x9.me收到请求,根据路径参数QvjlI获取到原始链接:
http://www.dazhongkanche.com/gou/20200914/64294.html
3、服务器返回301/302状态码,将响应头中的Location设置为 原始链接;
4、浏览器重定向到原始链接;
5、返回响应;
短链接生成:
1、库表设计:id、code(短链码)、url(原链接),采用Key-Value方式对应存储
2、短链码
1)、存储方式:62进制,每位 可选 a-z、A-Z 和 0-9 等62个字符,比通常的数字方式存储量大。注:
4位就可以表征 62^4 = 1477,6336 约 1500万条数据;
5位可以表征 62^5 = 9,16132832 约 9亿条数据;
6位可以表征 62^6 = 568,00235584 约 560亿条数据;
例子:
通过短链码的长度,可以判断得出各平台服务板块的历史业务量,如上:
【菜鸟驿站】同【拼多多】,采用了8位短链码,62^8 = 218,3401,05584896,业务量都累积到了多少万亿级别。
另,值得关注,点击拼多多的链接直接打开APP(具体技术方案参考: 如何从推广短信链接唤起 App ),优于绝大部分应用的推广。
2)、生成方式:可以按ID自增序列(自增后10到62进制转换)、哈希算法方式生成,可参考: 如果教你设计一个 短 链接 系统,你会从那些方面来提高性能呢?
重定向性能考虑:
1、301、302跳转区别:
1)、301跳转,永久重定向,默认被浏览器缓存,只要访问过一次短链,后续都会直接跳转原链地址,不经过服务器;
2)、302跳转,临时重定向,不被浏览器缓存,每次都经过短链接服务器;
所以,要想实现短链更灵活的资源跳转配置,采用302跳转就比较合适,缺点是:对搜索引擎不友好+性能问题(每次都要过短链服务);考虑到SEO+访问性能(浏览器缓存解决),建议采用301跳转方式。
2、通过Redis做查询表,短链Code 映射长链接Url;
3、防机器人脚本访问,结合白名单等机制;
注:作为对外开放的短链服务对设计要求更高,完全作为一个独立系统进行设计。
注:本当章节下所有内容的撰写思路与方式:
1、针对指定资源手动生成短链接,进行投放;
2、针对指定资源,批量生成短链接,并形成记录,以便进行投放;
3、在一些环节(如:短信投放、微信分享时),自动生成短链接(用户无感)完成投放;
介绍如何应用场景:
1、朋友圈消息:
2、微信/QQ群插件自动发送链接
微信,空间节约效果良好:
常用的QQ群自动回复插件:
3、短信营销
优点:
1、在链接投放时,方便复制粘贴;
2、短网址使排版变的美观,简洁,用户关注的重点在文案上面;
3、防止屏蔽,如短信屏蔽、微信屏蔽....;
4、访问资源有效期控制,添加密码等:
原则上可以在跳转之前做任何后端想做的事情,比如访问统计,比如后续访问链接的切换,所以对访问资源的可控性就比较强,
举例:跳转资源不稳定,今天是A,明天是B,就可以通过修改原链接实现跳转资源的切换。
关联技术的延展介绍
1、301对重定向的影响: https://www.batmanit.com/p/457.html
2、有投放就必然涉及到投放资源、渠道、及效果的管理:
资源管理,比如说文章;
渠道管理,比如:微信渠道(公号、朋友圈、运营人员个人私聊)、QQ、微博、短信、头条.....
投放效果统计,针对文章的效果统计(各文章的效果如何?),针对渠道的效果统计(各渠道的效果如何?),针对文章&渠道的效果统计(即不同文章在不同渠道的效果如何?)
3、 一切为了营收!如何从推广短信链接唤起 App ?
4、 如果教你设计一个 短 链接 系统,你会从那些方面来提高性能呢?
Ⅱ 怎么做一个短网址缩短网站,网址缩短后要以自己的顶级域名显示的,不是显示现在网上流行的url、t等。
现在网址缩短网站有很多了,就分析一下做得比较好的六度短网址6.in短网址生成服务平台:
(1)将长网址md5生成32位签名串,分为4段,每段4个字节
对这4段循环处理,取4个字节(32位),将它看成16进制串与0x3fffffff(30位1)(2)与操作,即超过30位的忽略处理
(3)这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串
(4)总的md5串可以获得4个6位串,取里面的任意一个就可作为这个长url地址
(5)把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是sssss9,第63个组合就是ssssba,再利用洗牌的算法,把原字符打乱后保存,那么对应位置的组合字符串就会是无序的组合。
(6)把长网址存入数据库,取返回的id,找出对应的字符串,例如返回id为1,那么对应上面的字符串组合就是aaa,同理id为2时,字符串组合为aaa,依次类推,直至到达62种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。
Ⅲ 微博上是如何把一个长URL变成一个短小的URL的这是一种加密方式吗
那是新浪针对新浪微博推出的一种功能。不用用户自己转换,这个步骤由新浪来代劳。
他不是加密方式,简单的说就是换了一种表现形式
为什么要这样做的,原因我想有这
样几点:
1、微博限制字数为140字一条,那
么如果我们需要发一些连接上去,
但是这个连接非常的长,以至于将
近要占用我们内容的一半篇幅,这
肯定是不能被允许的,所以短网址
应运而生了。
2、短网址可以在我们项目里可以
很好的对开放级URL进行管理。有
一部分网址可以会涵盖XX,暴力,
广告等信息,这样我们可以通过用
户的举报,完全管理这个连接将不
出现在我们的应用中,应为同样的
URL通过加密算法之后,得到的地
址是一样的。
3、我们可以对一系列的网址进行
流量,点击等统计,挖掘出大多数
用户的关注点,这样有利于我们对
项目的后续工作更好的作出决策。
其实以上三点纯属个人观点,因为
在我接下来的部分项目中会应用
到,所以就了解了一下,下面先来
看看短网址映射算法的理论(网上
找到的资料)
1)将长网址md5生成32位签名串,分
为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将
他看成16进制串与0x3fffffff(30位1)
与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作
为字母表的索引取得特定字符, 依
次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取
里面的任意一个就可作为这个长url
的短url地址;
很简单的理论,我们并不一定说得
到的URL是唯一的,但是我们能够
取出4组URL,这样几乎不会出现太
大的重复。