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

234 天前
 Wxh16144

写在前面哈

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

实现

  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 服务,并且最近登录后发现弃用提示。发现提供了数据导出的功能,所以就导出了历史数据。

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

但是之前的路径是不一样,所以我们可以痛过 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 ,所以会存在一定的请求次数限制。

以上,这是一个玩具~

试试看文中提到的短网址

12117 次点击
所在节点    程序员
66 条回复
nagisaushio
234 天前
天才!
hellodigua
234 天前
太骚了这操作,想都想不到
evan1
234 天前
这不是天才是什么!
tutouguai
234 天前
难你天?
abinnz
234 天前
办法不错,就是有安全风险,泄露 GITHUB_TOKEN
SoyaDokio
234 天前
怎一个骚字了得,高,实在是高!
8fQJ4SKWTUrK68eC
234 天前
看不懂,但字多,应该很牛逼!
lijilin92
234 天前
666
fj19
234 天前
这个路子确实有点野
mobile8
234 天前
hhh LGTM
Wvg9eBo3U0c8BLd2
234 天前
TMD 甘! 你真是一个天才
vampuke
234 天前
奇技淫巧
deplives
234 天前
你小子还真是个天才
xiaowoli
234 天前
什么奇技淫巧,你分明就是 甜菜!
asilencebtf
234 天前
woc 难他天
musi
234 天前
啊? 这? 啊?
Leung818
234 天前
我?六!
suhu
234 天前
```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
234 天前
@suhu 哦 不好意思,刚刚看到楼主说过这个问题了
kristofer
234 天前
真想看看你的小脑瓜里都在想什么。嘿嘿嘿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1105845

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX