zoukankan      html  css  js  c++  java
  • 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'));
  • 相关阅读:
    fpga配置方式 .jic固化为ps模式
    fpga新建nios
    四轴飞行器飞行原理与双闭环PID控制
    fpga为什么要用nios 开发
    error A space is required after ',' comma-spacing
    vuex : Newline required at end of file but not found eol-last
    vue -Missing space before value for key 'path'vue.js解决空格报错
    visual studio 自动补全功能 以及代码没有颜色
    hadoop 伪分布模式环境搭建
    django框架-DRF工程之认证功能
  • 原文地址:https://www.cnblogs.com/houdj/p/13396244.html
Copyright © 2011-2022 走看看