一、什么是短链接

  含义:就是把普通网址,转换成比较短的网址。比如:http://t.cn/RlB2PdD 这种,比如:微博;这些限制字数的应用里都用到这种技术。

  优点:短、字符少、美观、便于发布、传播。

  百度短网址:http://dwz.cn/

  google短网址: https://goo.gl/

二、原理分析

  当我们在浏览器里输入 http://t.cn/RlB2PdD 时会经历以下及格步骤:

  1.浏览器解析DNS,获取域名对应的IP;

  2.当获取到IP时,会往这个IP地址发送http的get请求以获取到RlB2PdD对应的长链接地址;

  3.HTTP通过301转到对应的长链接URL;

  注意:这里为什么使用301?301是永久性转移(重定向),也就是说,这个短地址一经生成就不会发生变化了,所以符合http中301的一个语义;

三、算法实现

  短地址一般都是由0-9A-Za-z这62个字符随机组合而成,所以我们可以生成一个62进制的串,可以根据10进制数转成62进制数;比如咱们存储数据库的时候自增的id,就可以根据这个id来生成对应的62进制的短码,作为短链接的码数,最长6位、最短1位,以下是实现的方法仅供参考: 

/***
* 10进制转为62进制
* @param $num
* @return string
*/
function from10_to62($num) {
$to = 62; // 0-9a-zA-Z总计62个字符
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 这个可以打乱顺序
$ret = '';
do {
$ret = $dict[$num%$to] . $ret; // 取模
$num = floor($num/$to); // 取余数
} while ($num > 0);
return $ret;
} /***
* 62进制转为10进制
* @param $num
* @return int|string
*/
function from62_to10($num)
{
$from = 62;
$num = strval($num);
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($num);
$dec = 0;
for ($i = 0; $i < $len; $i++) {
$pos = strpos($dict, $num[$i]); // 查找字符出现得位置 16
$bcpow = bcpow($from, $len - $i - 1); // 取62得N次方(保留整数)
$bcmul = bcmul($bcpow, $pos); // 计算每个62进制字符得10进制值
$dec = bcadd($bcmul, $dec); // 计算的值累加
}
return $dec;
} var_dump(from10_to62(1000));
var_dump(from62_to10('g8'));

  内容参考自:https://hufangyun.com/2017/short-url/

short url短链接原理的更多相关文章

  1. short URL 短网址实现原理剖析

    short URL 短网址实现原理剖析 意义,简短便于分享,避免出现超长 URL 的字符长度限制问题 原理分析, 使用 HashMap 存储对应的映射关系 (长度不超过7的字符串,由大小写字母加数字共 ...

  2. 短网址(short URL)系统的原理及其实现

    短网址(short URL)系统的原理及其实现 https://hufangyun.com/2017/short-url/?hmsr=toutiao.io&utm_medium=toutiao ...

  3. URL及short URL短网址

    URL,uniform resource locator,经常被称为网址,尤其是在使用HTTP的时候.通常是一个指向某个资源的字符串.   URLs经常被用于网页(http),但也可以用于文件传输(f ...

  4. 短网址url接口api,url短链接(t.cn、url.cn)生成

    简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...

  5. 百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?

    一.短链接是什么 url=HPqdQ5VR3vA39x7ZWoWyNzwWnsDhTbh66BTpdzsJLroBDzFRm4JV-G818Zc027uZrwe7zxtxnD4H2FUahftpUK& ...

  6. 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)

    短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...

  7. C#如何实现url短地址?C#短网址压缩算法与短网址原理入门

    c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映射算法: 将长网址md5生成 ...

  8. 生成短链接的URL

    假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...

  9. 【转】C# URL短地址压缩算法及短网址原理解析

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaur ...

随机推荐

  1. springJdbc in 查询,Spring namedParameterJdbcTemplate in查询

    springJdbc in 查询,Spring namedParameterJdbcTemplate in查询, SpringJdbc命名参数in查询,namedParameterJdbcTempla ...

  2. str.split()与re.split()的区别

    str.split(): >>>'hello, world'.split() >>>['hello,','world'] >>>'hello, w ...

  3. Spring中神奇@aotuWrited

    好久没有写博客了,放假就是充电学习的时候,的确一直是这样做的.来给自己一点掌声.我们还是进入今天的主题吧. 我们自己写代码一般会向下面这样干啊,因为这样简单,其余交给spring去做吧.Spring会 ...

  4. 利用Python爆破数据库备份文件

    某次测试过程中,发现PHP备份功能代码如下: // 根据时间生成备份文件名 $file_name = 'D' . date('Ymd') . 'T' . date('His'); $sql_file_ ...

  5. Ubuntu图形界面和字符界面转换、指定默认启动界面

    1.按ALT+CTRL+F1.F2.F3.F4.F5.F6.F7可来回切换7个界面(Linux实体机)      其中ALT+CTRL+F7可切换到图形界面(Linux实体机)        如果是V ...

  6. Streaming 101

    开宗明义!本文根据Google Beam大神Tyler Akidau的系列文章<The world beyond batch: Streaming 101>(批处理之外的流式世界)整理而成 ...

  7. thinkjs2.2中的定时任务

    暂且先讨论定时任务的其中两种实现方法: 1.setInterval() setInterval()可按照指定的周期(毫秒数计)来调用函数或者计算表达式: setInterval()方法会不停的调用该函 ...

  8. 【Spring源码深度解析学习系列】注册解析的BeanDefinition(五)

    对于配置文件,解析和装饰完成之后,对于得到的beanDefinition已经可以满足后续的使用要求了,还剩下注册,也就是processBeanDefinition函数中的BeanDefinitionR ...

  9. Android 反编译Apk提取XML文件

    Apktool https://ibotpeaches.github.io/Apktool/install/ 下载地址:Apktool https://bitbucket.org/iBotPeache ...

  10. Elasticsearch学习之SearchRequestBuilder常用方法说明

    SearchRequestBuilder常用方法说明  (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index: (2) ...