资讯动态

零后端、无数据库:ha.mr如何把链接压缩完全搬进浏览器?

发布时间:2026/10/17 9:13:34 来源:尧图企业网站定制
【免费下载链接】ha.mrStatic URL compressor and QR code optimizer项目地址https://gitcode.com/gh_mirrors/ha/ha.mr点击查看免费下载ha.mr 是一款完全静态的链接压缩URL 短链接 QR 码优化工具整个压缩和解压逻辑全部写在浏览器里零后端、无数据库。它没有一条短代码 → 原始链接的映射记录压缩结果就藏在你看到的短链接本身任何人打开它浏览器现场解压出原始网址。本文带你快速搞懂它的原理并用 3 步把它部署成自己的短链接服务。它和普通短链接服务有什么不同传统短链接服务比如 TinyURL 这类的工作方式是你提交长链接 → 服务器生成一个随机码 →把随机码 → 长链接写进数据库→ 用户点短码时查库、302 跳转。ha.mr 彻底反其道而行对比项传统短链接服务ha.mr存储位置数据库URL 本身#后或路径里解压发生地服务器查库用户浏览器本地跳转方式服务器 302 重定向页面提示Proceed to …?手动确认链接过期/删除可管理不存在没存过东西依赖后端 数据库一个静态 HTML 页面额外能力无一键生成更小的 QR 码换句话说ha.mr 的后端就是一个 nginx 配置和一张静态页面。这也是它最有趣的地方链接被压缩成了一段自解释的数据。核心原理把一个链接压成一个大数字压缩算法全部集中在 docs/compress.js 这一个文件里约 660 行核心思路分三步第 1 步挑掉人人都能猜到的部分。协议http/https、www.前缀、index.html结尾这些只占 1 个比特的是/否标记端口号直接按数值编码。第 2 步用 Huffman 码字典匹配常见网站。这是压缩率的灵魂。docs/compress.js 里内置了四套按真实链接频率排序的 Huffman 码字典——顶级域名、二级域名、域名字符、路径字符数据来自 Reddit 链接数据集和 url-dataset。效果非常直观com 的编码就是 1 —— 1 个比特 youtube 是 001github 是 10100第 3 步剩余部分逐段挑最优编码。路径被拆成一段一段path / query 参数 / hash每段先尝试塞进一个最小字符集纯数字小写Base64不行就退回 Huffman 编码两种方案比个大小留短的。最后所有比特被合并进一个任意精度的大整数BigInt再按输出字符集转成字符串。为什么用大整数而不是定长进制注释里写得很清楚一个只有 3 种取值的字段理论上只需约 1.6 bit二进制会浪费到 2 bit而共享一个整数流可以做到近乎无损。相关实现在 docs/compress.js。解压则是完全对称的过程decompress()把字符串还原成整数按同样的字典反向走一遍docs/compress.js。没有数据库payload 到底存在哪答案是——就存在链接里分两种形态见 docs/main.js文字短链接http://ha.mr#压缩串。#后面的片段标识符按浏览器规范根本不会发送给服务器服务端连请求都看不到 payloadQR 码HTTPS://HA.MR/压缩串。扫码后 payload 放在路径里没有 hash此时会切换到 QR 专用字母表。两种情况流程一致你在 docs/404.html 这个页面粘贴长链接docs/main.js 里的updateOutput()实时压缩并显示比原链接小 X%的绿色/红色提示你把得到的短链接分享出去访问者打开链接页面自动识别 payload、在本地解压出原始网址然后弹出一个确认框——Proceed to 原始链接?docs/main.js用户点Yes, redirect me →才跳转。手动确认这个看似小气的细节其实是刻意设计没有服务器就没有自动 302 的信任背书让用户亲眼看一次目标地址更安心。部署端只靠一个 nginx 技巧nginx.conf 里把所有路径都try_files到/404.html——任何 URL 都返回同一张页面剩下的事全是浏览器 JavaScript 的活。三种输出字母表QR 码为什么能更小docs/alphabets.js 定义了三个输出字符集字母表用途特点ASCII默认文字输出完整 URL 合法字符集QRalphanumericQR 码输出大写数字$*-./:专为 QR 码设计Emoji文字输出可选用表情组合编码纯为好玩QR 码这条路线有讲究普通 QR 生成器默认按字节模式编码而 QR 标准里的字母数字模式每 2 个字符只占 11 bit效率更高。ha.mr 的 QR payload 精确限定在这个模式的字符范围内并懒加载了轻量级 QR 生成器 docs/lean-qr/lean-qr.js仅在勾选Output QR code时才加载见 docs/main.js。生成 QR 时还可以拖动滑条调节最小纠错等级——纠错等级越低同样内容下的 QR 码越小docs/404.html。页面还会贴心地提醒如果链接里带着一堆跟踪参数?和之后的部分删掉它们往往比任何压缩算法都有效docs/404.html。一键部署3 步拥有自己的静态短链接服务第 1 步克隆仓库git clone https://gitcode.com/gh_mirrors/ha/ha.mr第 2 步Docker 启动推荐Dockerfile 基于nginx:alpine只拷贝静态文件compose.yml 把容器 80 端口映射到宿主 8080docker compose up -d # 浏览器打开 http://localhost:8080 即可第 3 步可选装一个命令行版hamr项目附带 Nix 包定义flake.nix、package.nix能装出一个名为hamr的 CLI本质是用 Node 跑 standalone.jsnix run .#hamr -- https://www.example.com/index.html # 压缩 nix run .#hamr -- https://www.example.com/index.html qr # 生成 QR 版短链 nix run .#hamr -- http://ha.mr#xxxx decode # 把短链解回原址没有 Nix 也没关系——核心就是两个文件把 docs/compress.js 和 docs/alphabets.js 拷进任何能跑 ES Module 的 Node 环境即可。诚实的边界它不是什么只支持 http/https且明确拒绝 URL 里带账号密码docs/main.js短链接可能比长链接还长字典是统计产物一个生僻小站的链接压缩后反而更大页面会用红色如实标出Output is X% larger不藏着掖着无法删除、无过期、无统计既然没存东西就什么管理功能都没有。作者在 README 里明确写着Keep the scope small——这是一个刻意保持极简的项目欢迎修 bug但谢绝功能堆叠README.md。适合你如果…不适合你如果…想要一个能自己托管、永远不需要运维的短链接页需要删除链接、统计点击量经常给实体物料印 QR 码希望码更小需要非 http(s) 协议ftp、git 等想学习链接也能被信息论压缩的完整实现期望随机码不可预测payload 完全可逆写在最后ha.mr 用最少的代码演示了一个反直觉的事实缩短链接本质是编码问题不是数据库问题。一个静态页面 两套 Huffman 字典 一个浏览器 JS 文件就完成了传统服务要后端才能做的事还顺手把 QR 码做得更紧凑。代码量小到可以一个下午读完——从 docs/compress.js 入手你会发现大整数当数据流这个设计比想象中优雅得多。赞分享【免费下载链接】ha.mrStatic URL compressor and QR code optimizer项目地址https://gitcode.com/gh_mirrors/ha/ha.mr点击查看免费下载相关推荐IIC-OSIC-TOOLS设计流程从RTL到GDS的完整开源芯片设计实践IIC OSIC TOOLS设计流程从RTL到GDS的完整开源芯片设计实践 在开源芯片设计领域IIC OSIC TOOLS集成基础设施协作开源IC工具为zip.js完全指南浏览器端文件压缩解压利器zip.js完全指南浏览器端文件压缩解压利器 zip.js是一个开源的JavaScript库专门用于在浏览器、Deno和Node.js环境中压缩和解压ZIP如何快速上手Qwen3-235B-A22B终极混合专家大模型指南如何快速上手Qwen3 235B A22B终极混合专家大模型指南 Qwen3 235B A22B是阿里通义千问团队推出的最新一代混合专家MoE大语言模型基础模型大模型NLPQwen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑