2

首先,一点上下文:

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

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

另一种选择是使用cookieHTML5 网络存储将会话信息存储在客户端中。

但我正在寻找的是将缩短的 URL 参数存储在我附加到 URL 的一个参数中并能够从该参数重新构造原始参数的可能性。

第一个想法是使用Base64编码将所有参数放在一个中,但这会产生更大的 URL。

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

问题是:是否还有其他我忽略的可能性可以用来将大量 URL 参数无损压缩成一个较小的参数?


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

4

1 回答 1

2

您始终可以滚动自己的压缩。如果你只是简单地应用一些霍夫曼编码,结果总是会更小(但是然后base64编码它,它会增长一点,所以净效果可能不是最佳的)。

我在我使用的嵌入式项目上使用自定义压缩策略,我首先使用lzjb(lempel ziv 派生,跟随源代码链接,非常严格的实现(来自 open solaris)),然后是 huffman 编码压缩结果。

不过,lzjb 算法在非常短的输入上表现不佳(~16 字节,在这种情况下我不压缩)。

于 2011-08-22T09:36:31.367 回答