• 请不要在回答技术问题时复制粘贴 AI 生成的内容
musclepanda
V2EX  ›  程序员

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

  •  1
     
  •   musclepanda · Apr 16, 2018 · 9339 views
    This topic created in 3127 days ago, the information mentioned may be changed or developed.
    问了度娘实在找不到,只能找到 2 种
    1、如何生成短网址;但现在的问题不是如何生成,而是如何还原
    2、直接解析出最终网址;没法分步了解每个短连接是如何转化的

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

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

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

    加个语言就有大把结果了。
    之所以造成我们用的不是一个百度,那是因为姿势不正确啊。
    akira
    akira
    Apr 16, 2018
    21
    一路 301 302 回去就是了,
    不过有见过一种所谓的短地址,是会给你另外一个页面,然后在里面点按钮跳转的,这个要多一个步骤了
    randyzhao
    randyzhao
    Apr 17, 2018
    22
    @imdong 其实好像都不查重的,同样一个原链接生成两次,就发两个号。
    txydhr
    txydhr
    Apr 17, 2018 via iPhone
    23
    一一对应存在数据库里。。。。
    balamiao
    balamiao
    Apr 17, 2018
    24
    服务端不就保存一个 map 嘛,根据 key 拿 value 的事情呀~
    shuizhengqi
    shuizhengqi
    Apr 17, 2018
    25
    很简单,你请求一个短连接过来,我给你返回个网址,301 重定向,根本就没有还原短网址这一说法
    moonsola
    moonsola
    Apr 17, 2018
    26
    你输入一个短网址 a,后端访问这个短网址后根据返回的头信息可以获取原网址 b,将 b 输出到前端就可以了。应该就是这么简单粗暴
    至于你说的“分步解析出短网址还原过程中每个 url ”,不清楚是什么意思
    opengps
    opengps
    Apr 17, 2018
    27
    如果用算法生成短网址,那么可能用算法还原。
    但是如果用字典或者说数据库生成,那么外部人员是无法还原的
    luozic
    luozic
    Apr 17, 2018 via iPhone
    28
    key-value 或者算法 md5 那种方式类似➕缩略图
    pmispig
    pmispig
    Apr 17, 2018
    29
    谁告诉你能还原的?
    pmispig
    pmispig
    Apr 17, 2018
    30
    你给的这个网站还原的方式就是 get 一次,把 302 地址给你,这就叫还原了?
    wizardforcel
    wizardforcel
    Apr 17, 2018 via Android
    31
    负载均衡+kv 数据库。。。
    xxxy
    xxxy
    Apr 17, 2018
    32
    每一家公司的短地址生成方式都不太一样,想直接还原是不可能的。直接访问一下查看历史跳转记录就行。
    sampeng
    sampeng
    Apr 17, 2018
    33
    nginx+lua+redis。。了解一下。
    FrankAdler
    FrankAdler
    Apr 17, 2018
    34
    生成方式不一样, 还原方式就不一样, 我说一个基于文件的短网址吧
    一个文件, 原本 size 是 x, 网址长度 y, 写入文件后, 文件大小变成 z, 那么把 x,y 记录下来, 下次可以以 fseek 的方式还原 url
    这里有几个问题
    1. x,y 可能比较大或者说是长度比较长, 那么可以转为高进制, 比如 64 进制, 进制越高, 长度越短, 但是稀奇古怪的字符越多
    2. url 越来越多, 文件越来越大, 那么可以占用 1 位长度来做散列, 能保证很长的一段时间 url 足够短
    FrankAdler
    FrankAdler
    Apr 17, 2018
    35
    不建议用任意一种数据库来存储这个对应关系
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   770 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 23:12 · PVG 07:12 · LAX 15:12 · JFK 18:12
    ♥ Do have faith in what you're doing.