V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Wxh16144
V2EX  ›  程序员

一个奇淫技巧实现的短网址

  •  4
     
  •   Wxh16144 ·
    Wxh16144 · 19 小时 31 分钟前 · 4583 次点击

    写在前面哈

    这个方案只是出于学习和分享的目的,肯定是不建议在生产环境中使用的。并且不是最优的方案,只是一个简单的实现。

    实现

    1. 使用 GitHub Pages 自定义子域名,然后通过 404 页面实现跳转。
    2. 本地使用 git commit --allow-empty -m 将每一个真实网址作为一个 commit message 提交到 GitHub 仓库。
    3. 由于每一个提交都会生成一个唯一的 SHA-1 值,然后通过这个 SHA-1 值作为短网址的路径。
    4. 最后在 404 页面中通过 GitHub commits api 用 SHA-1 值获取到 commit message ,然后跳转到真实网址。

    比如: https://link.wxhboy.cn/22bb (22bb 是一个 SHA-1 值)

    以上就是整个实现的思路。源码在这里, Wxh16144/links/blob/gh-pages/404.html

    Firebase Dynamic Links 迁移

    Firebase Dynamic Links 已被弃用,不应该在新项目中使用。该服务将于 2025 年 8 月 25 日关停。

    由于以前使用的 Firebase Dynamic Links 服务,并且最近登录后发现弃用提示。发现提供了数据导出的功能,所以就导出了历史数据。

    Firebase Dynamic links 导出截图

    这里可以用脚本将导出的数据的真实地址一条条的转换成 commit message ,然后提交到 GitHub 仓库中。

    但是之前的路径是不一样,所以我们可以痛过 tag 来实现一一对应。就像这样:

    使用 tag 迁移历史短网址

    如上操作后,我们就可以通过 tag 或分支名来实现语义化的路径

    总结

    用 SHA-1 值作为路径,虽然不是最短的短网址,但是可以保证唯一性。

    加上之前网络上出现过一篇名为 《 Anyone can Access Deleted and Private Repository Data on GitHub 》 的文章,说的是即便删除了有关分支和 tag 依然可以通过 api 获取到提交的信息。微软回应这是设计如此。

    所以我们在仓库只要有 push 过的提交,都可以通过 SHA-1 值来获取到提交信息。也就是说,这个基于 SHA-1 值的短网址服务是可以永久保留的。

    缺点

    说完我们的骚操作,也要说说缺点。

    1. 由于每一个真实网址都是一个提交,所以会导致仓库的提交记录非常多,不利于查看。 (可以通过 tag 或分支名来实现语义化的路径)
    2. 因为 GitHub 仓库是公开的,所以短网址也是公开的,不适合敏感信息。
    3. 由于是通过 404 页面实现跳转,所以会有一定的延迟。
    4. 404 页使用了 GitHub api ,所以会存在一定的请求次数限制。

    以上,这是一个玩具~

    试试看文中提到的短网址

    41 条回复    2025-01-18 07:55:54 +08:00
    nagisaushio
        1
    nagisaushio  
       19 小时 28 分钟前
    天才!
    hellodigua
        2
    hellodigua  
       19 小时 24 分钟前
    太骚了这操作,想都想不到
    evan1
        3
    evan1  
       19 小时 21 分钟前
    这不是天才是什么!
    tutouguai
        4
    tutouguai  
       19 小时 20 分钟前
    难你天?
    abinnz
        5
    abinnz  
       19 小时 19 分钟前
    办法不错,就是有安全风险,泄露 GITHUB_TOKEN
    SoyaDokio
        6
    SoyaDokio  
       19 小时 19 分钟前
    怎一个骚字了得,高,实在是高!
    BestVPS
        7
    BestVPS  
       19 小时 18 分钟前
    看不懂,但字多,应该很牛逼!
    lijilin92
        8
    lijilin92  
       19 小时 14 分钟前
    666
    fj19
        9
    fj19  
       18 小时 55 分钟前
    这个路子确实有点野
    mobile8
        10
    mobile8  
       16 小时 56 分钟前
    hhh LGTM
    lolita89201
        11
    lolita89201  
       16 小时 53 分钟前
    TMD 甘! 你真是一个天才
    vampuke
        12
    vampuke  
       16 小时 44 分钟前   ❤️ 1
    奇技淫巧
    deplives
        13
    deplives  
       16 小时 43 分钟前
    你小子还真是个天才
    xiaowoli
        14
    xiaowoli  
       16 小时 24 分钟前
    什么奇技淫巧,你分明就是 甜菜!
    asilencebtf
        15
    asilencebtf  
       16 小时 20 分钟前
    woc 难他天
    musi
        16
    musi  
       16 小时 18 分钟前 via iPhone
    啊? 这? 啊?
    Leung818
        17
    Leung818  
       16 小时 13 分钟前
    我?六!
    suhu
        18
    suhu  
       16 小时 1 分钟前
    ```json
    {
    "message": "API rate limit exceeded for ****. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
    "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
    }
    ```

    github 是有 rate limiting 的 鉴于机场 ip 万人骑的原因,不建议用于生产(和 OP 说的一样)
    suhu
        19
    suhu  
       16 小时 0 分钟前
    @suhu 哦 不好意思,刚刚看到楼主说过这个问题了
    kristofer
        20
    kristofer  
       16 小时 0 分钟前
    真想看看你的小脑瓜里都在想什么。嘿嘿嘿
    dqzby
        21
    dqzby  
       15 小时 54 分钟前
    太有意思了
    jadehare
        22
    jadehare  
       15 小时 25 分钟前
    牛逼,跟当时看到浏览器两个页面用 localstorage 定位一个感觉,骚,牛逼。
    hjzx050935
        23
    hjzx050935  
       15 小时 14 分钟前
    这个有点好玩
    rimwindy
        24
    rimwindy  
       15 小时 4 分钟前
    有意思
    whoami9426
        25
    whoami9426  
       15 小时 0 分钟前
    天才!
    fengpan567
        26
    fengpan567  
       14 小时 55 分钟前
    出院!!!
    macaodoll
        27
    macaodoll  
       14 小时 39 分钟前 via Android
    怎一句牛逼能形容的
    CoderAdam
        28
    CoderAdam  
       14 小时 4 分钟前
    挺有想法的,牛逼!!!
    M5tuA
        29
    M5tuA  
       14 小时 1 分钟前
    牛逼
    96
        30
    96  
       13 小时 49 分钟前
    你直接出院。

    和这个一起出院: https://blog.muna.uk/archives/shortUrl-vercel.html
    guanhui07
        31
    guanhui07  
       13 小时 47 分钟前
    牛逼
    prosgtsr
        32
    prosgtsr  
       12 小时 42 分钟前
    出院!!!
    FaiChou
        33
    FaiChou  
       12 小时 38 分钟前 via iPhone
    @jadehare 说下这个骚操作
    duzhuo
        34
    duzhuo  
       12 小时 8 分钟前
    @96 感觉还是楼主这个牛 b
    fengmk2
        35
    fengmk2  
       11 小时 36 分钟前
    fork 楼主的 repo ,配置了一下,真的可以

    http://307.run/5c94
    coldle
        36
    coldle  
       9 小时 45 分钟前
    看傻了,天才!
    ysc3839
        37
    ysc3839  
       9 小时 38 分钟前   ❤️ 1
    都用网页跳转了,完全可以把列表写进网页里。
    实际上建议用 Vercel 或者 Firebase Function 等 Serverless 服务来跳转,也是直接把链接写进脚本里即可。
    lonely701
        38
    lonely701  
       9 小时 13 分钟前
    奇技淫巧,文化水平还需要提高。
    Tianket
        39
    Tianket  
       5 小时 28 分钟前
    天才!
    timothyye
        40
    timothyye  
       2 小时 9 分钟前 via Android
    @lonely701 哈哈哈哈哈就
    timothyye
        41
    timothyye  
       2 小时 8 分钟前 via Android
    奇淫技巧是什么意思?特别淫荡的技巧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:04 · PVG 10:04 · LAX 18:04 · JFK 21:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.