短址(short URL)原理及其实现

高性能短链设计-URL Shortener:详细设计说明 https://dzone.com/articles/url-shortener-detailed-explanation 介绍 URL缩短器是一种用于从很长的URL创建短链接的服务。通常,短链接的大小是原始URL的三分之一甚至四分之一,这使得它们更易于键入,呈现或发布。单击短链接用户将自动重定向到原始URL。 在线提供了许多URL缩短服务,例如tiny.cc,bitly.com,cutt.ly等。实现URL缩短服务并不是一项复杂的任务,并且通常是系统设计访谈的一部分。在这篇文章中,我将尝试解释实现. 阅读详情

前言:

最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。


介绍:

短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。

首先我们到 http://goo.gl/,然后把本文博客的地址http://blog.youkuaiyun.com/beiyeqingteng 输入进去,最后它会返回一个更短的URL,http://goo.gl/Jfs6q 。如下图所示:


URL 解析:

当我们在浏览器里输入 http://goo.gl/Jfs6q 时,DNS首先解析获得http://goo.gl/的IP地址。当DNS获得IP地址以后(比如:74.125.225.72),会向这个地址发送HTTP GET请求,查询 Jfs6q, 这个时候,http://goo.gl/服务器会把请求通过HTTP 301转到对应的长URL http://blog.youkuaiyun.com/beiyeqingteng 。后面的解析过程就和平常网址解析是一样的了。


短址本质:

短址本质上是实现了一个映射函数 f: X -> Y 。而这个映射函数必须同时具有两个特点:

1. 如果 x1 != x2, 则 f (x1) != f(x2);

2. 对于每一个 y, 能够找到唯一的一个 x 使得 f(x) = y;

对于任何的线性函数,比如 f(x) = 2x,都满足这样的条件。


好了,如果了解了短址的本质,我们再来看它是如何实现的。

注明:在google URL shortener 服务中,它允许一个长 url 对应多个短的url。这可能是出于安全上的考虑。在本文中,我们不考虑这种情况。


实现:

短址的长度一般设为 6 位,而每一位是由 [a - z, A - Z, 0 - 9] 总共 62 个字母组成的,所以6位的话,总共会有 62^6 ~= 568亿种组合,基本上够用了。在google URL shortener 服务中,短址长度为 5,大概有9亿多种组合.


假设我们用数据库来保存长地址和短地址的映射,那么,在表 LongtoShortURL 中,我们会有三列:

1. ID,int,  自动增长;

2. LURL,varchar,  // 长URL;

3. SURL, varchar,  // 短URL。


现在我们考虑通过如何长URL得到唯一的短URL。


在讲具体算法以前,先提一个问题:10进制数和16进制数是否满足刚刚提到的映射函数 f: X -> Y中的两个条件?

答案: 是。


本文的思路也是利用进制之间的转换。因为我们总共有 62 个字母,我们可以自创一种进制,叫做 62 进制。其规则如下:

0  → a
1  → b
...
25 → z
...
52 → 0
61 → 9

所以,对于每一个长地址,我们可以根据它的ID,得到一个6位的 62 进制数,这个6位的 62 进制数就是我们的短址。具体实现如下:

public ArrayList<Integer> base62(int id) {
	
	ArrayList<Integer> value = new ArrayList<Integer>();
	while (id > 0) {
		int remainder = id % 62;
		value.add(remainder);
		id = id / 62;
	}
	
	return value;
}

举例:

对于 ID = 138,通过 base62(138), 我们得到 value = [14, 2]。根据上面的对应规则表,我们可以得到其对应的短址为:aaaabn 。(由 value 得到具体的短址,可以通过switch 语句得到,因为代码太长,在此略过。)


当我们想通过短址找到所对应的长地址,方法也很简单,就是把62进制数转成10进制数即可,这样我们就可以得到长地址的ID了。

比如,对于短址aaae9a,其62进制为[0, 0, 0, 4,61,0] ,则其长地址的ID 为[0, 0, 0, 4,61,0] = 0×62^5+ 0×62^4 + 0×62^3 + 4×62^2 + 61×62^1 + 0×62^0 = 1915810。有了ID,我们自然就可以得到长地址了。


参考:http://stackoverflow.com/questions/742013/how-to-code-a-url-shortener (本文算法来源)

http://blog.sina.com.cn/s/blog_65db99840100lg4n.html

转载请注明出处:http://blog.youkuaiyun.com/beiyeqingteng

URLShortener:获取网站和ID,并创建一个简短的URL URL缩短器 输入一个网站和一个ID,并创建一个简短的URL。 短网址将以以下形式创建:“ yourdomain.com/ID” 您可以在此处尝试使用URL缩短器: : 使用的技术 利用MongoDB Atlas数据库存储ID。 利用带有node.js的快递服务器连接到数据库并管理后端,以便为静态网页提供服务并创建用于重定向和创建短URL的端点。 前端功能的Ultized Javascript,以及HTML和CSS,利用引导程序对网页进行样式设置。 依存关系 人体解析器 Dotenv 表示 mongodb 僧 小路 是的 Nodemon 立即下载

相关推荐

多相机标定与单应变换:用OpenCV实现BEV俯视全景图

多路监控画面分散在不同屏幕,难以快速理解全局空间关系。通过相机标定与畸变校正,利用单应矩阵将各视角图像投影到统一的地面坐标系,即可合成BEV鸟瞰全景图。该技术是车载360°环视系统和自动驾驶BEV感知的雏形,也适用于场地安防与移动机器人导航。基于Python+OpenCV的四路相机实现,完整覆盖标定、投影变换、多路羽化融合与实时优化,为多视角拼接和俯视全景图项目提供可复现的工程参考。

weixin_29056865的博客 246

聊聊短地址及其原理

原文 短地址原理,优快云同步发布。 转载请注明出处,谢谢! 简介 一个同事遇到一个问题,他说受限于第三方的服务,自己请求所带过去的字符串因为太长,无法从第三方服务获取信息,很是苦恼????。后来我们商量了一下,最终借鉴短地址的思想解决了问题。道理很简单,因为我们请求中的附加字符串信息第三方服务只是透传回来给我们,我们只需要把这些附加信息进行字符压缩就可以了,这样请求带过去的字符串长度就满足了要求????...

CodingMan 4257

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3874

【免费API】url-shorteners网址缩短器

API 描述 Auth HTTPS CORS 1pt 一个简单的URL缩短服务 No Yes Yes Bitly URL缩短和链接管理 OAuth Yes Unknown CleanURI URL缩短服务 No Yes Yes ClickMeter 监视、比较和优化您的营销链接 apiKey Yes Unknown Clico URL缩短服务 apiKey Yes Unknown Cutt.ly URL缩短服务 apiKey Yes Unknown Drivet UR

API开发 639

STM32CubeIDE之SHT3X温湿度传感器移植HAL库

有了前面的OLED的学习,这个学习起来也很快。 分以下几步走 1.你要有个温度传感器,SHT3X这个型号的,因为我要讲这个 2.你要有个STM32开发板(我用的是STM32L431RCT) 3.顺便找台电脑下载一个STM32CubeIDE 4.简单的找一个SHT3X的驱动,我是去某宝嫖的,一般卖这个的都有,这个驱动分两个文件,是.c和.h的,我直接把这两个放在下边 读了我上一篇的人,看这个应该很熟悉吧,一样的套路,学习方法是一样的,你就照搬就行 下面是sht3x.c的原文档,里面有个CRC..

qq_47736089的博客 2316

芒果YOLOv5改进05:损失函数IoU 篇之Repulsion Loss:原创改进损失函数 Repulsion:解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv5改进代码实践|结合Repulsion 解决目标遮挡场景下检测🚀

包括YOLOv5、YOLOv7、YOLOv8等模型改进 4566

架构:短址(short URL)原理及其实现(短地址|短url)

前言: 最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。 介绍: 短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。 首先我们到 http://goo.gl/,然后把本文博客的地址http://blog.youkuaiyun.com/beiyeqingteng 输入进去,最后它会返回

lisheng19870305的专栏 5082

基于工作流的低代码AI应用开发:Flock平台核心架构与实战指南

在AI应用开发领域,工作流编排正成为连接大语言模型(LLM)能力与复杂业务逻辑的关键技术。其核心原理是将任务分解为模块化节点,通过可视化方式定义执行顺序与数据流向,从而实现灵活可控的自动化流程。这种范式极大地提升了开发效率,降低了技术门槛,使得开发者能够聚焦于业务设计而非底层代码。在技术价值层面,工作流编排支持检索增强生成(RAG)、多智能体协作等高级模式,并能通过人工干预节点确保关键流程的可靠性与合规性。其典型应用场景包括智能客服、自动化办公、数据分析助手等。本文以Flock平台为例,深入解析了如何利用其

weixin_26848497的博客 382

短址(short URL)原理及其实现 来源:http://blog.youkuaiyun.com/beiyeqingteng

前言: 最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。 介绍: 短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。 首先我们到 htt

u010384854的专栏 726

rk3588上适配wifi模组aic8800

记录一下在rk3588上调试aic8800,调试分为Debian11以及Android12两个平台,这里主要是讲过程以及修改的过程,以补丁的形式来提供解决方法。在Debian11下主要通过配置设备树、编译驱动并自动加载固件完成调试,详细介绍了设备树修改、驱动编译脚本调整和驱动加载流程。

m0_60805802的博客 1006

网页内容抓取的艺术:使用R语言解析动态网页

本文探讨了使用R语言处理动态网页数据的方法。针对AJAX加载的学术网站,传统的静态抓取和RSelenium方法存在会话终止、浏览器错误等问题。通过分析发现内容通过admin-ajax.php加载,提出使用httr2模拟POST请求获取数据,配合rvest解析HTML内容。该方法避免了浏览器自动化的弊端,实现了高效稳定的动态内容提取,为处理类似AJAX网站提供了通用解决方案。

m0_74337424的博客 55

短址(short URL)

前言: 最近看了一些关于短址(short URL)方面的一些博客,有些博客说到一些好的东西,但是,也不是很全,所以,这篇博客算是对其它博客的一个总结吧。   介绍: 短址,顾名思义,就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例。 首先我们到 http://goo.gl...

月中老郎 588

G.6 PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】

百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-优快云博客PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-优快云博客 PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-优快云博客PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-优快云博客通过前面几篇文章大家都有一定了解,下面

丨汀、的博客 6186

短 URL 服务的设计与实现

转载: https://mp.weixin.qq.com/s/DJM7KFFfgZ2AgfrrYHXSzQ 短url的好处有: 短. 短信和许多平台(微博)有字数限制,太长的链接加进去都没有办法写正文了. 好看. 比起一大堆不知所以的参数,短链接更加简洁友好. 方便做一些统计.你点了链接会有人记录然后分析的. 安全. 不暴露访问参数. 这就是为什么我们现...

qiang_zi_的专栏 966

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

高性能短URL服务实现

大家应该在工作或者生活过程中也经常遇到段url,那他的好处是什么呢?为什么使用短url?

hello.reader 1381

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

短URL服务的设计以及实现

前言 想必大家也经常收到垃圾短信吧…短信中的链接一般都是短链接,类似于下图这样: 为什么这里面的url都是短的呢?有什么好处呢?怎么做到的呢? 短url的好处有: 短. 短信和许多平台(微博)有字数限制,太长的链接加进去都没有办法写正文了. 好看. 比起一大堆不知所以的参数,短链接更加简洁友好. 方便做一些统计.你点了链接会有人记录然后分析的. 安全....

KHOST的博客 288

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

短 URL 服务,怎么设计与实现?

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 | 呼延十来源 |http://t.cn/AilftMhR前言想必大家也经常收到垃圾短信吧...短...

程序猿DD 744
上一篇: 打印二叉树的边缘节点
下一篇: ZigZag打印二叉树
beiyetengqing
博客等级 码龄14年 148粉丝 169原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值