如何实现无损URL缩短

时间:2011-08-19 07:14:12

标签: c http url-shortener

首先,一点背景:

我正在尝试在我自己的服务器上实现URL缩短(在C中,如果这很重要)。目的是避免长URL,同时能够从缩短的URL恢复上下文。

目前我有一个实现,可以在服务器上创建会话,由某个ID标识。这可行,但消耗服务器上的内存(并且不需要,因为它是具有有限资源的嵌入式服务器,并且设备的主要目的不是提供网页,而是做其他很酷的东西)。

另一种选择是使用 cookies HTML5 webstorage将会话信息存储在客户端中。

但我正在搜索的是可以将缩短的网址参数存储在我附加到网址的一个参数中,并且能够从该网址重新构建原始参数。< / p>

首先想到的是使用Base64 - 编码将所有参数合二为一,但这会产生更大的URL。

目前,我正在考虑压缩URL参数(使用一些压缩算法,如 zip bz2 ,...),对其进行Base64编码压缩二进制blob并将该信息用作上下文。当我得到参数时,我可以进行Base64解码,解压缩结果并掌握原始URL。

问题是:还有其他任何可能性,我忽略了我可以使用无损压缩大量的URL参数列表成一个较小的吗?


更新
home 的评论之后,我意识到我忽略了压缩本身会给压缩数据增加一些开销,使得压缩数据甚至比原始数据更大,因为例如zipping的开销添加内容。
所以(正如 home 在他的评论中指出的那样),我开始认为压缩整个URL参数列表只有在参数超出一定长度时才真正有用,否则,我可能最终拥有比以前更大的网址。

1 个答案:

答案 0 :(得分:2)

您可以随时自行压缩。如果您只是应用一些huffman编码,结果将始终更小(但是对它进行base64编码,它会增长一点,因此净效果可能不是最佳的。)

我在我使用的嵌入式项目中使用自定义压缩策略,我首先使用lzjb(lempel ziv衍生物,关注源代码链接,非常严格的实现(来自open solaris)),然后按照通过霍夫曼编码压缩结果。

lzjb算法在非常短的输入上表现不佳(~16个字节,在这种情况下我将其保持未压缩状态)。