문제

I am using Snappy (https://github.com/fdmanana/snappy-erlang-nif) as a zlib replacement for HTTP compression on a Mochiweb application.

While Snappy works in general for me, and zlib works fine for compressing responses before sending them out, using Snappy as a zlib replacement results in client-browsers garbling the response.

  1. Does Snappy encode into utf-8 charset?
  2. Do client-browsers, in general, know how to decompress Snappy compressed documents?
  3. Am I doing something obviously supid?

This works:

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.

This doesn't

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.
도움이 되었습니까?

해결책

There's not one browser which does support snappy compression ;) You can't choose any compression algorithm you like, you have to choose the algorithms browsers support. And most browsers only support deflate and gzip.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top