1

Mochiweb アプリケーションでの HTTP 圧縮の zlib の代替として、Snappy ( https://github.com/fdmanana/snappy-erlang-nif ) を使用しています。

私にとって Snappy は一般的に機能し、zlib は応答を送信する前に圧縮するのに問題なく動作しますが、Snappy を zlib の代替として使用すると、クライアント ブラウザーで応答が文字化けします。

  1. Snappy は utf-8 文字セットにエンコードしますか?
  2. 一般に、クライアント ブラウザは、Snappy で圧縮されたドキュメントを解凍する方法を知っていますか?
  3. 私は明らかに愚かなことをしていますか?

これは機能します:

success(Req, Code, Body) ->
    case iolist_size(Body) of
    N when N > 1024000 ->
        Data = zlib:gzip(Body),
        Req:respond({Code, [{"Vary","Accept-Encoding"},
                      {"Content-Encoding","gzip"},
                      {"Content-Type", "application/json"}], 
                     Data});
     _ ->
        Req:respond({Code, [{"Content-Type", "application/json"}], Body})
end.

これはしません

success(Req, Code, Body) ->
    case iolist_size(Body) of
    N when N > 1024000 ->
        {ok, Data} = snappy:compress(Body),
        Req:respond({Code, [{"Vary","Accept-Encoding"},
                      {"Content-Encoding","snappy"},
                      {"Content-Type", "application/json"}], 
                     Data});
    _ ->
        Req:respond({Code, [{"Content-Type", "application/json"}], Body})
end.
4

1 に答える 1

0

すばやい圧縮をサポートするブラウザは 1 つもありません ;) 好きな圧縮アルゴリズムを選択することはできません。ブラウザがサポートするアルゴリズムを選択する必要があります。また、ほとんどのブラウザーは deflate と gzip のみをサポートしています。

于 2012-08-27T18:20:58.347 に答える