链接缩短 短链接 长链接转为短链接

这篇具有很好参考价值的文章主要介绍了链接缩短 短链接 长链接转为短链接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

核心原理

长链接转为短链接的核心原理是: 将短链接与原始长链接做一个映射,访问短链接的时候,通过重定向的方式转到长链接。

应用场景

比如分享功能,查看分享信息的原始链接通常是很长的,直接发给用户,体验不是很好,这时候就可以将其映射为一个短链接再发给用户。
又比如我们熟知的百度网盘分享文件,虽然细节有所差异,但核心原理都是如此。

长短链接映射表结构核心字段设计

字段名 字段描述
code 短链接代码
biz_type 业务类型
biz_no 业务编号
origin_link 原始链接

除了这些核心字段外,还可以根据业务需求设计一些辅助字段。

核心字段说明

code-短链接代码: 用于与短链接域名拼接成短链接的编号,比如code是“123456”,域名是“share.baidu.com”,则完整的短链接为“https://share.baidu.com/123456”;
biz_type-业务类型: 原始链接的内容属于哪个业务,比如分享的是一篇随笔;
biz_no-业务编号: 原始链接的内容所属业务的编号, 比如分享的随笔的随笔编号;
origin_link-原始链接: 访问短链接,会重定向到此原始链接。

实现逻辑

总体步骤

  1. nginx配置短链接重定向到【Step 2】的接口
  2. 产品提供根据短链接代码重定向原始链接的接口(根据短链接代码查询原始链接并重定向)
    之所以有【Step 1】,是因为短链接代码与原始链接的映射存在数据库中,需要产品提供服务从数据库中根据【code】查询出【origin_link】之后做重定向,而程序提供的查询接口通常包含了一些其它信息(比如接口域名是“server.baidu.com”,而查询接口的uri可能是“/api/share/v1/view/{code}”),仍然不够短。

逻辑

以实际的例子来说明,下面先列举过程中所有需要使用到的素材:

  1. 短链接代码(code):8lq4Sb
  2. 短链接域名:share.hulujianyi.com
  3. 程序接口域名:server.hulujianyi.com
  4. 程序接口URI以及参数:/hulu-common/api/share/v1/view/?shareCode=$code
  5. 原始链接(origin_link): https://patient-h5.hulujianyi.com/#/patientDetail?code=8lq4Sb&bizType=2&bizNo=3&t=1693298372310&shareSource=3&shareUserId=7&sign=f4Y9hK0Im23MbzMn%2Fx3st6FgGQO8FAXABSNEuptbXsXxBGj4CbUIpWeY2yGlwMwADBRs9tiYy2Zh xVkPU7Gjw5CP0zyitnH1GQ48zetfM9XdjYB4MVkowgr1tG2WMCmavggi1Y1Z0KI1GPLASeXOaSQF IYtOo2gHOhldr%2BGHnc4%3D&e=1694594372310
    根据以上信息,则整体逻辑为:
  6. 访问内容的原始链接为【素材5】,而分享到用户的是由【素材1】和【素材2】拼出来的短链接【https://share.hulujianyi.com/8lq4Sb】;
  7. nginx配置短链接转发到由【素材3】和【素材4】拼出来的程序提供的接口【https://server.hulujianyi.com/hulu-common/api/share/v1/view/?shareCode=8lq4Sb】;
  8. 接口的功能是根据请求参数shareCode,也即是短链接代码code,从数据库中查询出原始链接,然后做重定向;
  9. 所以整体流程为:访问短链接 -> nginx重定向到接口 -> 接口重定向到原始链接

根据以上流程,下面贴出一下关键性配置和代码:

  1. nginx配置转发
# 分享配置
server{
    server_name share.hulujianyi.com;

    access_log /usr/local/nginx/logs/access.log main;

    listen 80;
    listen 443 ssl;
    include cert.conf; # 这里是引入的ssl的证书配置

    location ~ ^/(?<code>[^/]+)/?$ {
        return 302 "https://server.hulujianyi.com/hulu-common/api/share/v1/view/?shareCode=$code";
    }
}

配置中,正则表达式 ^/(?<code>[^/]+)/?$ 捕获 URL 中的URI,在演示例子中截取到的是8lq4Sb,并将其存储在名为 code 的变量中。然后在配置中使用 code 变量,例如在 rewrite 指令中进行重定向。
2. 接口根据code查询原始链接和重定向的伪代码文章来源地址https://www.toymoban.com/news/detail-679718.html

    @GetMapping(value = "/view")
    public void view(@RequestParam("shareCode") String shareCode, HttpServletResponse res) throws IOException {
        try {
            String link = iShareService.viewLink(shareCode);// 这里是调用的根据code从数据库查询原始链接的方法
            res.sendRedirect(link);
        } catch (BizException e) {
            LOGGER.warn(ExceptionUtil.exceptionStackTraceToString(e));
            super.error(res, e);
        } catch (Exception e) {
            LOGGER.warn(ExceptionUtil.exceptionStackTraceToString(e));
            super.error(res, null);
        }
    }
  1. 最终访问的原始链接打开的内容,有一些业务校验,则属于另一套体系,这里不做说明。

到了这里,关于链接缩短 短链接 长链接转为短链接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【音视频原理】图像相关概念 ⑥ ( YUV 与 RGB 之间的转换 | YUV444 颜色编码格式 转为 RGB 格式 | RGB 颜色编码格式 转为 YUV444 格式 )

    YUV 与 RGB 颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式 转为 RGB 格式 的 转换公式 取决于 于 YUV 的具体子采样格式 : YUV444 YUV422 YUV420 YUV444 格式 转为 RGB 格式 的 转换公式如下 : R = Y + 1.13983 * (V - 128) G = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128) B = Y + 2.03211 * (U

    2024年01月24日
    浏览(60)
  • 链接器工作原理

    ​链接器解析符号引用的方法是将每个引用与它输入的可重定位目标文件的符号表中的一个确定的符号定义关联起来,可重定位目标文件的符号表在随笔ELF可重定位目标文件 - mjy66 - 博客园 (cnblogs.com)中有提到,以ELF格式的目标文件举例,.symtab节就是其符号表。 ​在解析符号

    2024年02月08日
    浏览(32)
  • C 语言->编译和链接实现原理

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 今天学习 :浅学编译和链接内部实现原理 前提:本文是在gcc编译环境下学习,目前只是浅学习 在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种 是翻译环

    2024年01月20日
    浏览(39)
  • 字典核心底层原理

    字典对象的核心是散列表。散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。 由于,所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket。 假设字典a对象创建完后,数

    2024年02月04日
    浏览(31)
  • Android 热修复核心原理

    dexopt 在 Dalvik 中虚拟机在加载一个dex文件时,对 dex 文件 进行 验证 和 优化的操作,其对 dex 文件的优化结果变成了 odex(Optimized dex) 文件,这个文件和 dex 文件很像,只是使用了一些优化操作码。 dex2oat ART 预先编译机制 ,在安装时对 dex 文件执行dexopt优化之后再将odex进行 AO

    2024年02月11日
    浏览(30)
  • Elasticsearch 核心概念与原理

    作者:禅与计算机程序设计艺术 Elasticsearch是一个开源、分布式、RESTful搜索和分析引擎。它的主要特性如下: 分布式特性:Elasticsearch集群中的节点彼此协同工作,形成一个整体,从而提供横向扩展性; RESTful API接口:Elasticsearch提供了丰富的基于HTTP协议的API接口,支持全文检索

    2024年02月07日
    浏览(48)
  • RPC核心原理详解

    RPC的全称是Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为RPC调用了?显然并不够。 我理解的RPC是帮助我们屏蔽网络编程

    2024年02月11日
    浏览(35)
  • Kafka的核心原理

    目录 Tpoic的分区和副本机制 分区 副本  消息存储机制和查询机制 消息存储机制   log文件和index文件的解析  index文件内容基本结构 查询机制 Kafka中生产者数据分发策略 随机分发策略 指定分区策略 Hash取模策略 自定义分区策略 轮询分发策略 和 粘性分发策略 Kafka消费者的负

    2024年01月17日
    浏览(29)
  • 【C++】多态 ④ ( 多态实现原理 | C++ 联编概念 | 链接属性 | 内部链接 | 外部链接 | 联编与链接 | 静态联编 | 动态联编 | 联编 与 virtual 关键字 )

    \\\" 联编 \\\" Linkage 指的是 将 程序模块 和 代码 互相关联的过程 , 将不同源文件中的 同名函数 或 变量 进行链接 ; 在 C++ 语言中 , 每个 函数 或 变量 都有一个 链接属性 , 该链接属性决定了该 函数 或 变量 是否可以在其他源文件中使用 ; 联编 是通过 声明函数或变量 的 链接属性

    2024年02月05日
    浏览(34)
  • React核心原理与实际开发

    学习目标 React是啥? 官方定义:将前端请求获取到的 数据 渲染为 HTML视图 的 JavaScript库 。 直接创建react,使用初始化会创建package.json 再安装 使用纯JS创建ReactDOM(元素) React.createElement()方法使用不是很灵活,知道就好; ReactDOM.render()方法渲染react元素很重要!!!使用起来

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包