首先,一些背景:如何實現無損URL縮短
我想實現我自己的服務器上的網址縮短(在C,如果該事項)。其目的是避免長URL,同時能夠從縮短的URL恢復上下文。
目前我有一個實現,在服務器上創建一個會話,由某個ID標識。這可以工作,但會消耗服務器上的內存(並且因爲它是一個資源有限的嵌入式服務器,而且設備的主要目的不是提供網頁,而是做其他很酷的事情,所以不需要)。
另一種選擇是使用cookies或HTML5 webstorage將會話信息存儲在客戶端中。
但我正在尋找的是可以將縮短的URL參數存儲在一個參數,我附加到該URL並能夠重新構建該參數的原始參數。
首先想到的是使用Base64 -encoding將所有參數合併成一個,但這會產生更大的URL。
目前,我正在考慮壓縮URL參數(使用一些壓縮算法像拉鍊,BZ2,...),做好對壓縮的二進制BLOB使用Base64編碼,並利用這些信息作爲背景。當我得到參數時,我可以做一個Base64解碼,解壓縮結果,並在原始URL上進行操作。
的問題是:是那裏,我俯瞰,我可以用無損壓縮的URL參數大名單成一個單一的較小任何其他可能性?
更新:
從家的意見後,我意識到,我忽略了壓縮自身增加一些開銷,壓縮數據進行壓縮的數據甚至比因爲開銷的原始數據大例如zipping增加了內容。因此(如主頁在他的評論中聲明),我開始認爲,如果參數超過一定的長度,壓縮整個URL參數列表才真正有用,否則,我可能會得到一個偶數比以前更大的URL。
我想只有一種方法可以做到這一點 - 使用查找表,就像您在會話中已經做的那樣。您的嵌入式服務器(db,文件系統)上沒有可用的外部存儲空間?最後你必須把信息存儲在某個地方,通過使它變小,你總是會丟失信息。 – home
@home:如果我使用打包算法(zip,bz2),我不會丟失信息,對吧? – eckes
是的,但它可能會炸燬你的URL的長度。只有非常長的URL纔會減少長度。我的意思是「更小」是從URL中刪除信息。幾周前我嘗試過 - zip> base64編碼,對我來說不起作用:-) – home