Mochiweb アプリケーションでの HTTP 圧縮の zlib の代替として、Snappy ( https://github.com/fdmanana/snappy-erlang-nif ) を使用しています。
私にとって Snappy は一般的に機能し、zlib は応答を送信する前に圧縮するのに問題なく動作しますが、Snappy を zlib の代替として使用すると、クライアント ブラウザーで応答が文字化けします。
- Snappy は utf-8 文字セットにエンコードしますか?
- 一般に、クライアント ブラウザは、Snappy で圧縮されたドキュメントを解凍する方法を知っていますか?
- 私は明らかに愚かなことをしていますか?
これは機能します:
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.