今天无意中看到一个名词--"短链接",一开始以为就是我们平时所说的http短连接,后来一查完全不是一回事。我们平时所说的短连接对标的概念是http长连接,指在http相应返回后就关闭http连接。而短链接的概念是指:将原本冗长的URL做一次“包装”,变成一个简洁可读的URL。

今天这边博客就来具体讲下短链接的具体概念,为什么需要使用短连接以及短连接生成的方式。


什么是短链接

比如说我之前有个URL如下:

https://mp.weixin.qq.com/s__biz=MzA5NDI5NDI3Nw==&mid=2649497809&idx=2&sn=381d02312b0c49e9cc406436f963efc5&chksm=884858bbbf3fd1ad6f431e94ca9dd0543d817a3856bf857807cb088dda9b9aa855720d4177eb&mpshare=1&scene=23&srcid=1012SKaGEy75jnX0omALmfx1#rd

这个URL很长,而且不易于阅读。我现在通过某种方式将上面的URL转义成:

http://url.cn/5MMEX3D

当我们访问<http://url.cn/5MMEX3D>时,和访问最初的URL效果是一样的。那么http://url.cn/5MMEX3D就叫做原始连接的短链接

为什么使用短链接

节省发送的内容

我们平时发微博或者短信是都是有最大字符限制的。如果你的一个URL太长,一个URL占用的字符数就已经超过了最大限制,根本发不出去。如果你细心观察过银行的信用卡中心给你发过来的活动短信的话,你会发现短信中的URL好多都是以短链接形式发送的。

提升用户体验

还是以上面的URL为列子。这一大串URL非常不美观,给人的感觉就是木马链接,用户可能都不会去点击。相反的,如果转换成http://url.cn/5MMEX3D,就非常易于阅读,看起来整洁干净,提高用户体验和点击率。

便于链接追踪,分析点击来源

通过短链接可以获知大部分用户的来源,和来源渠道的转化率、广告渠道的质量。通过渠道效果对比数据,更合理的进行广告投放和资源配置。

同一个页面不同的链接

每个用户需要推送带参数的唯一链接。

一定程度上保护原始网站链接

我们在玩Facebook,领英等社交时,有些需要分享一些带有我们网站链接的帖子和消息,尤其对于小白来说,如果发的内容次数过多,并且毫无互动可言或者直接被人举报多次,那么你的网址就会被社交平台标记,一旦标记,链接权重就会受影响,后面再投社交广告时就有麻烦了。

但是如果我们使用短链接就不会影响原始网站。

短链接生成平台

网上有很多短链接生成平台,下面列举几个:

还有许多其他小平台和私人搭建的平台,建议大家使用大厂的平台。

短链接生成原理

还是以刚刚的短链接http://url.cn/5MMEX3D为列子。当我们访问这个链接的时候我们先访问到url.cn对应的服务器,然后根据参数5MMEX3D找出它对应的原始连接,再重定向到这个原始链接上去。

短链接工作的原理非常简单,其中的关键点就是怎么将5MMEX3D和原始链接进行映射?下面引用下这篇博客总结的短链接实现方案。

可能的方案有以下几种:

  • 脑子第一时间想到的是:能不能通过一个压缩或者编码算法将长链接压缩更小的字符?显然,不能,压缩算法大多数都是针对大文本才奏效,本身的URL也不见得有多大...压缩出来肯定比原来的URL还大。
  • 脑子第二时间想到的是:能不能用Hash算法?还是不能,用Hash存在哈希碰撞的问题。这个场景是不允许有碰撞的。

其实现在业内比较流行的做法是:发号器(ID自增)+62进制编码。比如,我将https://github.com/ZhongFuCheng3y/3y这个长链接看作是10000,然后使用进制转换工具将10000进行62进制编码得到的结果是:2Bi,那么我们就可以得到一个短链接http://url.cn/2Bi

为什么要用62进制转换?64进制转换倒是听得多了

  • 62进制转换是因为62进制转换后只含数字+小写+大写字母。而64进制转换会含有/,+这样的符号(不符合正常URL的字符)
  • 10进制转62进制可以缩短字符,如果我们要6位字符的话,已经有560亿个组合了。

参考

【Web开发】到底什么是短链接的更多相关文章

  1. Node.js 全栈开发(一)——Web 开发技术演化

    这些年一直不断接触学习 Node 技术栈,个人的技术开发学习兴趣也越来越倾向 node 流.也许是由于英语的关系,也许是因为墙增加了学习国外一手资料的难度,加上现在流行的 web 开发技术并不太容易上 ...

  2. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  3. 微信开发第8章 通过accesstoken将长连接转换为短链接

    业务场景:开发的过程中经常会有一些很长的链接,这个时候如果生成二维码,会导致扫码的过程中识别比较慢,如果存入数据库,会导致数据库的字段长度要设定的很长才行,所以把长连接转换为短链接就越来越重要了. 接 ...

  4. Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接

      Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接: 推荐给你高品质的实战课程 https://laravel-china.org/courses?rf=158 ...

  5. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...

  6. 微信公众号开发C#系列-10、长链接转短链接

    1.概述 短网址的好处众多,便于记忆,占用字符少等,现在市面上出现了众多的将长网址转变为短网址的方法,但是由于他们都是小的公司在幕后运营,所以很不靠谱,面对随时关闭服务的可能,这样也导致我们将转换好了 ...

  7. Web开发基本准则-55实录-Web访问安全

    Web开发工程师请阅读下面的前端开发准则,这是第一部分,强调了过去几年里我们注意到的Web工程师务须处理的Web访问安全基础点.尤其是一些从传统软件开发转入互联网开发的工程师,请仔细阅读,不要因为忽视 ...

  8. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  9. 彻底理解和解决移动WEB开发中CLICK点透问题

    在移动WEB开发中,有时候可能会出现点透问题,本文将围绕这个TAP点透问题,详细的讲述到底什么是点透,为什么会出现点透,如何避免出现点透,如果不可避免的出现了,如何解决解决移动WEB开发中CLICK点 ...

随机推荐

  1. 面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

    Redis 面试题 1.什么是 Redis?. 2.Redis 的数据类型? 3.使用 Redis 有哪些好处? 4.Redis 相比 Memcached 有哪些优势? 5.Memcache 与 Re ...

  2. 使用 Vue + TypeScript 时项目中常用的装饰器

    目录 一.@Component 装饰器 1)父组件 2)子组件 二. @Emit 装饰器 1)父组件 2)子组件 三. @Model 装饰器 1)父组件 2)子组件 四. @Prop 装饰器 1)父组 ...

  3. 《Java基础知识》Java多态和动态绑定

    在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请读者先看一段代码: public class Demo { public static void main(String[] ar ...

  4. 「SAP技术」SAP VL02N 执行批次拆分报错,说不允许批次拆分?

    1,如下新建的DN 80017843,storage location 字段值为空.VL02N 试图去做批次拆分失败,系统报错说,Batch split is not permitted for ma ...

  5. 13-Node.js学习笔记-MongoDB

    数据库相关概念 在一个数据库软件最终可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据) database: 数据库,mongoDB数据库软件中可以 ...

  6. javascript 获取function的所在文件,并读取代码文件

    1.通过func.toString()可以获取function代码 2.要获取所在文件,需要错误调用func,根据堆栈可以获取 堆栈信息类似: at module.exports.data (d:\P ...

  7. numpy代码片段合集

    生成shape为(num_examples, num_inputs),符合0-1分布的数据. np.random.normal(0, 1, (num_examples, num_inputs))

  8. vc6.0 绿色版 下载地址

    最新版的vs2019已经完全不支持生成运行在xp下的应用程序 每次在xp下测试,都需要配置好vc6.0,但乱七八糟的太多了,给出地址,绿色版可用 http://www.downcc.com/soft/ ...

  9. C# 中的基本数值类型

    在之前的文章中(地址:https://www.vinanysoft.com/c-sharp-basics/introducing/),以 HelloWorld 程序为基础,介绍 C# 语言.它的结构. ...

  10. asp.net 页面中添加普通视频的几种方式

    第一种 是通过调用window media player进行播放诸如:wmv,asf等格式文件: <object align=center class="OBJECT" cl ...