短链(Short URL)即为短网址,主要包含域名加部分字符(这类字符中包含指定的数字或a-z、A-Z、0-9随机生成的字符),因其较短而无需冗长的链接,同时也帮助我们解决了因字符长度限制而闻名.
原理
当浏览器中输入:http://yourls.me:4444/1
时.
- DNS首先解析获得的
http://yourls.me:4444
IP地址 - 当 DNS获得IP地址以后(比如:192.168.3.12),会向这个地址发送 HTTP GET 请求,查询短码”1”.
http://yourls.me:4444
服务器会通过短码“1”获取对应的长 URL- 请求通过 HTTP 301 转到对应的长 URL
http://www.si1ent.xyz/2019/03/05/hello-world/
短链作用
- 缩短原链接长度,便于营销推广
- 数据统计,在重定向的过程中进行PV、UV等数据统计
- 屏蔽原链接域名
301&302
301 是永久重定向,302 是临时重定向.短地址一经生成就不会变化,所以用 301 是符合 HTTP 语义的.同时对服务器压力也会有一定减少. 但是如果使用了 301,我们就无法统计到短地址被点击的次数了.而这个点击次数是一个非常有意思的大数据分析数据源.能够分析出的东西非常非常多.所以选择302虽然会增加服务器压力.
算法实现
自增算法
不重复算法:
设置一个10进制的自增变量x,生成短链接时将其转换为62进制的数值,该数值便作为短链接,下次生成短链接则x+1.该算法运用了低进制转高进制,字符数会变少的原理.
十进制 2020,对应不同进制的字符表示:
Hash算法
MD5消息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数用于确保信息传输完整一致.MD5 加密后的位数一般为两种,16 位与32 位,这里我们使用32位.
流程
- 将长网址 md5 生成 32 位签名串,分为 4 段,每段 8 个字节.
- 对这四段循环处理, 取 8 个字节,将他看成 16 进制串与 0x3fffffff(30位1) 与操作,即超过 30 位的忽略处理.
- 这 30 位分成 6 段,每 5 位的数字作为字母表的索引取得特定字符,依次进行获得 6 位字符串.
- 总的 md5 串可以获得4个6位串,取里面的任意一个就可作为这个长 url 的短URL地址.
YOURLS介绍
YOURLS (Your Own URL Shortener) 一款开源PHP程序,实现短网址生成系统.而无需第三方平台你就可以获得所有的数据统计,并且支持一系列插件扩展<可单独写>.
官网
Github项目
YOURLS特点
- 安装简单
- 私有或公共均可
- 支持默认的数字顺序、指定关键字两种方式生成.
- 轻松创建和分享链接
- 历史点击报告、来源追踪、访客地理位置
- 支持API
YOURLS搭建
环境准备
- LAMP/LNMP环境WAMP等均可
- YOURLS源码
源码下载
配置文档
YOURLS配置文档在user目录下的config-sample.php内,提前拷贝并修改文件为config.php.
1 | define( 'YOURLS_DB_USER', 'root' ); //数据库账户 |
- 访问提醒数据库
注意:须提前新建数据库,不然会报错.
1 | http://yourls.me:4444/admin/ |
- Install
新建数据库后刷新网页即可显示如下图所示:
默认生成文件及表等信息.
- 系统登录
可登录多个账户(配置文件中添加).
- 新建短链
输入长链和关键字,关键字部分可省略,默认会是数字顺序添加.
- 访问实战
API使用
yourls 提供了丰富的API,使用自身的API可以实现:
- 生成或获取短链
- 获取短链的统计信息
- 以 JSON, XML 或者纯文本输出
- 通过用户名密码或者安全的无密码token机制授权
介绍配置文件时已经说明,如果想私有,就需要进行签名后才能使用API.
1 | http://yourls.me:4444/yourls-api.php |
参数
两种方式获得授权,一种是使用 username/password 对发送请求,但这种方式导致用户名密码在传输过程中被截取泄露;另一种方式是使用不需要密码的 token 机制,在 admin/tools.php 页面会产生当前用户的验证token;
动作 action 参数有很多个选项:
- shorturl 获取链接的短链接
在使用了值之后,另外两个参数
1 | - `url` 用来缩短的原始链接 |
- expand 获取短链接的原始长链接
将短链接展开
1 | - `shorturl` 值可以为 `abc` 或者完整的短链接 |
- url-stats 获取短链接的信息
短链接的统计信息
1 | - `shorturl` 值可以为 `abc` 或者完整的短链接 |
- stats 获取链接的信息
获取链接的信息
1 | - `filter` 值可以为 `top`, `bottom`, `rand`, `last` |
db-stats 获取全局的链接和点击数
输出格式 format 参数用来指定API输出的格式
1 | jsonp |
API生成短链
1 | curl -X POST \ |
参考
1 | https://hufangyun.com/2017/short-url/ |
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章