short url短链接原理
一、什么是短链接
含义:就是把普通网址,转换成比较短的网址。比如: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短链接原理的更多相关文章
- short URL 短网址实现原理剖析
short URL 短网址实现原理剖析 意义,简短便于分享,避免出现超长 URL 的字符长度限制问题 原理分析, 使用 HashMap 存储对应的映射关系 (长度不超过7的字符串,由大小写字母加数字共 ...
- 短网址(short URL)系统的原理及其实现
短网址(short URL)系统的原理及其实现 https://hufangyun.com/2017/short-url/?hmsr=toutiao.io&utm_medium=toutiao ...
- URL及short URL短网址
URL,uniform resource locator,经常被称为网址,尤其是在使用HTTP的时候.通常是一个指向某个资源的字符串. URLs经常被用于网页(http),但也可以用于文件传输(f ...
- 短网址url接口api,url短链接(t.cn、url.cn)生成
简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...
- 百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?
一.短链接是什么 url=HPqdQ5VR3vA39x7ZWoWyNzwWnsDhTbh66BTpdzsJLroBDzFRm4JV-G818Zc027uZrwe7zxtxnD4H2FUahftpUK& ...
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...
- C#如何实现url短地址?C#短网址压缩算法与短网址原理入门
c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映射算法: 将长网址md5生成 ...
- 生成短链接的URL
假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...
- 【转】C# URL短地址压缩算法及短网址原理解析
这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaur ...
随机推荐
- Linux进程作业的查看和杀死
引入进程 进程 线程 PS命令.TOP命令.其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进程,所属 ...
- Maven update project...后jdk变成1.5,update project后jdk版本改变
Maven update project...后jdk变成1.5,update project后jdk版本改变 ============================== 蕃薯耀 2018年3月14 ...
- redis 缓存类型为map
// 获取分类列表,以及同类品牌 public Map<String, List> getCatalogInfo(Product product) { String key = Cache ...
- session会话保持
#coding=utf-8 from flask import Flask from flask import request from flask import redirect from flas ...
- Flask-Script应用实例
#coding=utf-8 #Flask-Script是一个可以在flask应用外部编写脚本的扩展 #常用功能: #运行一个开发的服务器 #python shell中操作数据库看 #命令行任务 #fr ...
- 游戏服务器学习笔记 4———— master 模块介绍
(模块的介绍方法都是先说大体功能,在捡一些细节详细讨论.) master 类很简单,就3个函数,一个init,设置配置信息,并调用masterapp,然后还有一个循环启动子进程的start函数. 这里 ...
- Sphinx以及coreseek的安装及使用
检索结构 php -> sphinx -> mysql 非结构化数据又叫全文数据,非固定长度字段例如文章标题搜索这类适用sphinx 全文数据搜索: 1 顺序扫描 : 如like查找 2 ...
- 【转】Android四大基本组件介绍与生命周期
转自:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html Android四大基本组件分别是Activity,Serv ...
- 23种设计模式之状态模式(State)
状态模式是一种对象的行为型模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.状态模式封装了状态的转换过程,但是它需要枚举可能的状态,因此,需要事先确定状态种类,这也导致在状 ...
- 【LOJ6077】「2017 山东一轮集训 Day7」逆序对 生成函数+组合数+DP
[LOJ6077]「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k ,请求出长度为 n的逆序对数恰好为 k 的排列的个数.答案对 109+7 取模. 对于一个长度为 n 的排列 p ...