有同学了解短网址还原的原理吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
musclepanda
V2EX    程序员

有同学了解短网址还原的原理吗?

  •  1
     
  •   musclepanda 2018 年 4 月 16 日 8779 次点击
    这是一个创建于 2861 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问了度娘实在找不到,只能找到 2 种
    1、如何生成短网址;但现在的问题不是如何生成,而是如何还原
    2、直接解析出最终网址;没法分步了解每个短连接是如何转化的

    举个栗子: http://bitly.co 目前好像只看到这个网站可以分步解析出短网址还原过程中每个 url

    求问同学们啥原理可以实现
    35 条回复    2018-04-17 19:59:39 +08:00
    simp1e
        1
    simp1e  
       2018 年 4 月 16 日 via Android
    cdlixucd
        2
    cdlixucd  
       2018 年 4 月 16 日
    现在推特就用的这种技术吧
    luoway
        3
    luoway  
       2018 年 4 月 16 日
    现在还只用度娘,停留在五年前了吧?
    youxiachai
        4
    youxiachai  
       2018 年 4 月 16 日
    不是数据库插一个对应的还原链接吗...
    evil4
        5
    evil4  
       2018 年 4 月 16 日
    就是服务端请求一下这个短网址,然后当 http status code 是 301 / 302 的时候,输出最终跳转地址吧。
    holyghost
        6
    holyghost  
       2018 年 4 月 16 日
    你说的是 301 吧?
    musclepanda
        7
    musclpanda  
    OP
       2018 年 4 月 16 日
    @evil4 点醒了。。。谢谢
    KIDJourney
        8
    KIDJourney  
       2018 年 4 月 16 日   1
    Qiss
        9
    Qiss  
       2018 年 4 月 16 日
    一个 request 请求得到返回值输出。。。没啥技术含量了。。。
    dianso
        10
    dianso  
       2018 年 4 月 16 日 via Android
    跳转后复制
    mooo
        11
    mooo  
       2018 年 4 月 16 日   1
    用发号策略, 别用 hash https://www.zhihu.com/question/29270034
    night98
        12
    night98  
       2018 年 4 月 16 日 via Android
    kv,key=原网址 hash 后 url,value=原网址,然后重定向,搞定
    learnshare
        13
    learnshare  
       2018 年 4 月 16 日
    还原?都是跳转好么
    wd
        14
    wd  
       2018 年 4 月 16 日 via iPhone
    @mooo 要思考下 如果只是自己公司用 网址数量一般不会很多 hash 策略好多了 再加上网址过期策略 基本 hash 是比较好的策略
    vus520
        15
    vus520  
       2018 年 4 月 16 日
    1,短网址实现:预先生成 100*100*100 个 key,新的 URL 依次去填 value,不要使用 HASH
    2,短网址查找:查找 Key 即可
    3,短网址还原:curl + http 200/301
    imdong
        16
    imdong  
       2018 年 4 月 16 日
    我认为的短网址原理:
    插入到数据库(先查重),对自增 ID 进行进制转换( 16/62/64 等进制)
    转换的结果作为后缀使用。

    至于短网址还原,直接请求短网址地址,然后获取 header 的 location 字段即可。
    fengyj
        17
    fengyj  
       2018 年 4 月 16 日
    其实就是 key-value 键对,key 唯一(也就短域名后面的那些短字符串)对应这 value (就是你原先的长网址)。然后存储进数据库,主要就是数据库存储和查询操作。
    相关项目你去看看 https://github.com/YOURLS/YOURLS
    磕下源码就大概了解了。
    qiayue
        18
    qiayue  
    PRO
       2018 年 4 月 16 日
    楼主要做的是还原任意一个短网址,不是仅仅还原自己家的
    楼上一堆介绍短网址原理,怎么存数据库的都是不审题的
    楼主的需求 bitly.co 已经做得很好了
    SourceMan
        19
    SourceMan  
       2018 年 4 月 16 日 via iPhone
    这....就...非常尴尬了
    18 楼之前的
    580a388da131
        20
    580a388da131  
       2018 年 4 月 16 日
    php 短网址还原
    python 短网址还原

    加个语言就有大把结果了。
    之所以造成我们用的不是一个百度,那是因为姿势不正确啊。
    akira
        21
    akira  
       2018 年 4 月 16 日
    一路 301 302 回去就是了,
    不过有见过一种所谓的短地址,是会给你另外一个页面,然后在里面点按钮跳转的,这个要多一个步骤了
    randyzhao
        22
    randyzhao  
       2018 年 4 月 17 日
    @imdong 其实好像都不查重的,同样一个原链接生成两次,就发两个号。
    txydhr
        23
    txydhr  
       2018 年 4 月 17 日 via iPhone
    一一对应存在数据库里。。。。
    balamiao
        24
    balamiao  
       2018 年 4 月 17 日
    服务端不就保存一个 map 嘛,根据 key 拿 value 的事情呀~
    shuizhengqi
        25
    shuizhengqi  
       2018 年 4 月 17 日
    很简单,你请求一个短连接过来,我给你返回个网址,301 重定向,根本就没有还原短网址这一说法
    moonsola
        26
    moonsola  
       2018 年 4 月 17 日
    你输入一个短网址 a,后端访问这个短网址后根据返回的头信息可以获取原网址 b,将 b 输出到前端就可以了。应该就是这么简单粗暴
    至于你说的“分步解析出短网址还原过程中每个 url ”,不清楚是什么意思
    opengps
        27
    opengps  
       2018 年 4 月 17 日
    如果用算法生成短网址,那么可能用算法还原。
    但是如果用字典或者说数据库生成,那么外部人员是无法还原的
    luozic
        28
    luozic  
       2018 年 4 月 17 日 via iPhone
    key-value 或者算法 md5 那种方式类似缩略图
    pmispig
        29
    pmispig  
       2018 年 4 月 17 日
    谁告诉你能还原的?
    pmispig
        30
    pmispig  
       2018 年 4 月 17 日
    你给的这个网站还原的方式就是 get 一次,把 302 地址给你,这就叫还原了?
    wizardforcel
        31
    wizardforcel  
       2018 年 4 月 17 日 via Android
    负载均衡+kv 数据库。。。
    xxxy
        32
    xxxy  
       2018 年 4 月 17 日
    每一家公司的短地址生成方式都不太一样,想直接还原是不可能的。直接访问一下查看历史跳转记录就行。
    sampeng
        33
    sampeng  
       2018 年 4 月 17 日
    nginx+lua+redis。。了解一下。
    FrankAdler
        34
    FrankAdler  
       2018 年 4 月 17 日
    生成方式不一样, 还原方式就不一样, 我说一个基于文件的短网址吧
    一个文件, 原本 size 是 x, 网址长度 y, 写入文件后, 文件大小变成 z, 那么把 x,y 记录下来, 下次可以以 fseek 的方式还原 url
    这里有几个问题
    1. x,y 可能比较大或者说是长度比较长, 那么可以转为高进制, 比如 64 进制, 进制越高, 长度越短, 但是稀奇古怪的字符越多
    2. url 越来越多, 文件越来越大, 那么可以占用 1 位长度来做散列, 能保证很长的一段时间 url 足够短
    FrankAdler
        35
    FrankAdler  
       2018 年 4 月 17 日
    不建议用任意一种数据库来存储这个对应关系
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1321 人在线   最高记录 6679       Select Languge
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 16:19 PVG 00:19 LAX 08:19 JFK 11:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86