2

まず、ちょっとした文脈:

私は自分のサーバーに URL 短縮を実装しようとしています (問題がある場合は C で)。目的は、短縮された URL からコンテキストを復元できるようにしながら、長い URL を避けることです。

現在、特定の ID で識別されるサーバー上にセッションを作成する実装があります。これは機能しますが、サーバーのメモリを消費します (リソースが限られている組み込みサーバーであり、デバイスの主な目的は Web ページを提供することではなく、他のクールなことを行うことであるため、望ましくありません)。

もう 1 つのオプションは、CookieまたはHTML5 Web ストレージを使用してセッション情報をクライアントに保存することです。

しかし、私が探しているのは、短縮された URL パラメーターを1 つのパラメーターに格納して、URL に添付し、そのパラメーターから元のパラメーターを再構築できる可能性です。

最初に考えられたのは、Base64 エンコードを使用してすべてのパラメーターを 1 つにまとめることでしたが、これはさらに大きな URL を生成します。

現在、URL パラメーターを圧縮し ( zipbz2などの圧縮アルゴリズムを使用)、その圧縮されたバイナリ BLOB で Base64 エンコードを行い、その情報をコンテキストとして使用することを考えています。パラメータを取得したら、Base64 デコードを実行し、結果を圧縮解除して、元の URL を取得できます。

問題は、URL パラメータの大きなリストを1 つの小さなリストに可逆圧縮するために使用できる、見落としている他の可能性はありますか?


更新: home
からのコメントの後、圧縮自体が圧縮データにいくらかのオーバーヘッドを追加し、圧縮データが元のデータよりもさらに大きくなることを見落としていることに気付きました。 そのため(ホームが彼のコメントで述べているように)、URLパラメーターのリスト全体を圧縮することは、パラメーターが特定の長さを超えている場合にのみ実際に役立つと考え始めています。そうしないと、以前よりもさらに大きなURLになる可能性があるためです.

4

1 に答える 1

2

いつでも独自の圧縮をロールできます。単純にハフマンコーディングを適用すると、結果は常に小さくなります (ただし、base64 でエンコードすると、少し大きくなるため、最終的な効果はおそらく最適ではない可能性があります)。

私は、最初にlzjb(lempel ziv派生物、ソースコードのリンクをたどる、(オープンソラリスから)非常にタイトな実装)を使用する組み込みプロジェクトでカスタム圧縮戦略を使用しています。その後、圧縮された結果をハフマンコーディングします。

ただし、lzjb アルゴリズムは、非常に短い入力ではうまく機能しません (約 16 バイトの場合、圧縮しないままにしておきます)。

于 2011-08-22T09:36:31.367 に答える