Подходит ли сжатие Snappy для Mochiweb, HTTP-сжатие?
Я использую Snappy ( https://github.com/fdmanana/snappy-erlang-nif) в качестве замены zlib для сжатия HTTP в приложении Mochiweb.
В то время как Snappy в целом работает для меня, а zlib прекрасно работает для сжатия ответов перед их отправкой, использование Snappy в качестве замены zlib приводит к тому, что клиентские браузеры искажают ответ.
- Кодирует ли Snappy кодировку utf-8?
- Знают ли клиентские браузеры, как распаковывать сжатые документы Snappy?
- Я делаю что-то явно supid?
Это работает:
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.
1 ответ
Решение
Нет ни одного браузера, который поддерживает сжатие snappy;) Вы не можете выбрать любой алгоритм сжатия, который вам нравится, вы должны выбрать алгоритмы, которые поддерживают браузеры. И большинство браузеров поддерживают только deflate и gzip.