Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何实现无损URL缩短_C_Http_Url Shortener - Fatal编程技术网

C 如何实现无损URL缩短

C 如何实现无损URL缩短,c,http,url-shortener,C,Http,Url Shortener,首先,有一点背景: 我正在尝试在我自己的服务器上实现URL缩短(如果有必要的话,用C)。其目的是避免长URL,同时能够从缩短的URL恢复上下文 目前,我有一个实现,它在服务器上创建一个由特定ID标识的会话。这可以工作,但会消耗服务器上的内存(这是不需要的,因为它是一个嵌入式服务器,资源有限,设备的主要用途不是提供网页,而是做其他很酷的事情) 另一种选择是使用cookies或将会话信息存储在客户端中 但是我正在搜索的是将缩短的URL参数存储在我附加到URL的一个参数中的可能性,并且能够从该参数重新

首先,有一点背景:

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

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

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

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

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

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

问题是:是否还有其他我忽略的可能,我可以使用它将大量URL参数无损压缩为单个较小的参数


更新:
在收到来自家里的评论后,我意识到我忽略了压缩本身会给压缩数据增加一些开销,使压缩数据比原始数据更大,这是因为压缩本身会增加内容的开销。

因此(正如home在他的评论中所说的那样),我开始认为压缩整个URL参数列表只有在参数超过一定长度时才是真正有用的,因为否则,我可能会得到比以前更大的URL。

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

我在一个嵌入式项目上使用了一种定制的压缩策略,我首先使用了一个(lempel-ziv派生,源代码的follow链接,非常紧凑的实现(来自opensolaris)),然后是huffman对压缩结果进行编码


lzjb算法在非常短的输入上执行得不太好(大约16个字节,在这种情况下,我不压缩它)。

我想只有一种方法可以做到这一点——使用查找表,就像您在会话中所做的那样。您的嵌入式服务器(数据库、文件系统)上没有可用的外部存储?最后,您必须将信息存储在某个地方,通过使其“更小”,您将始终丢失信息。@home:如果我使用打包算法(zip,bz2),我不会丢失信息,对吗?是的,但它可能会使您的URL长度变长。只有对于很长的URL,它才会减少长度。“更小”的意思是从URL中删除信息。几周前我也尝试过同样的方法-zip>base64编码,对我不起作用:-)顺便说一句:现在我的计划是只在URL超过一定长度时才缩短URL。。。缺点是这些URL对用户不友好。@home:谢谢您给出的具有一定长度的提示。更新问题。