首先,介绍一下背景:
我试图在我自己的服务器上实现一个URL缩短(如果这很重要的话,用C语言)。目的是避免长URL,同时能够从缩短的URL恢复上下文。
目前,我有一个在服务器上创建一个会话的实现,它由特定的ID标识。这可以工作,但会消耗服务器上的内存(因为它是一个资源有限的嵌入式服务器,设备的主要用途不是提供网页,而是做其他很酷的事情)。
另一种选择是使用、cookies、或HTML5网络存储将会话信息存储在客户机中。
但我正在寻找的是,是否有可能将缩短的参数存储在中,其中一个参数是我附加到URL中的,并且能够从该参数中重新构造原始参数。
第一种想法是使用Base64-encoding将所有参数放入其中,但这会产生更大的URL。
目前,我正在考虑压缩URL参数(使用一些压缩算法,如zip、bz2、.),对压缩的二进制blob进行Base64 64编码,并使用这些信息作为上下文。当我得到参数时,我可以做一个have 64解码,解压缩结果,并掌握原始的URL。
的问题是:还有其他的可能,我可以忽略它,将大量的URL参数列表压缩成一个更小的列表
更新:
在收到家里的评论后,我意识到我忽略了压缩本身会给压缩数据增加一些开销,使得压缩的数据甚至比原始数据还要大,因为例如拉链增加了内容的开销。
因此(如home在他的评论中所述),我开始认为压缩整个URL参数列表只有当参数超过一定长度时才是真正有用的,否则,我最终可能会有一个比以前更大的URL。
发布于 2011-08-22 09:36:31
你可以随时滚动自己的压缩。如果您简单地应用一些赫夫曼编码,结果总是更小(但是base64编码它,它会增长一点,所以网络效果可能不是最佳的)。
我在一个嵌入式项目上使用自定义压缩策略,我首先使用的是伊兹吉布 (一个lempel ziv派生程序,遵循源代码链接,非常严格的实现(来自开放solaris)),然后是编写压缩结果的huffman。
但是lzjb算法在非常短的输入上表现不太好(大约16字节,在这种情况下,我没有压缩它)。
https://stackoverflow.com/questions/7118159
复制相似问题