【问题标题】:Is Snappy compression appropriate for Mochiweb, HTTP compression?Snappy 压缩是否适合 Mochiweb、HTTP 压缩?
【发布时间】:2012-08-28 02:20:58
【问题描述】:

我正在使用 Snappy (https://github.com/fdmanana/snappy-erlang-nif) 作为 zlib 替代 Mochiweb 应用程序上的 HTTP 压缩。

虽然 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.

【问题讨论】:

    标签: erlang mochiweb


    【解决方案1】:

    没有一种浏览器支持快速压缩;)您不能选择任何您喜欢的压缩算法,您必须选择浏览器支持的算法。而且大部分浏览器只支持deflate和gzip。

    【讨论】:

    • 这就是我们进行内容协商的原因。您实际上应该检查请求标头以查看您可以应用哪种压缩,即“接受”标头。
    • “Accept”标头定义客户端将接受哪些 Content-Type 值(例如 application/json)。要检测客户端是否支持 Content-Encoding 值,您需要查看“Accept-Encoding”标头:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…。无论如何,Snappy 不是官方认可的编码:iana.org/assignments/http-parameters/…
    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多