转自:http://dijkst.github.io/blog/2013/07/18/rang-rails-zhi-chi-response-shu-ju-gzip-ya-suo/
在 Rails 项目根目录下的config.ru
,加入use Rack::Deflater
,如下:
重启服务器即可。
如何判断是否生效了?那就来个测试。
先看看没有 GZip 压缩是什么样子的:
再看看使用了 GZip 压缩是什么样子的:
我们会看到采用了 GZip 后,输出的是乱码的,也不难看出,短了不少~这样就代表 GZip 设置成功了!
或者我们通过下面查看服务器response 信息来确认是否启用gzip
1
| |
也可以通过firebug这种浏览器工具来查看。
那该怎么用呢?
刚刚测试的时候其实都说明了:只需要在 request header 里面注明Acc-Encoding: gzip, deflate
即可。其实说白了,是否用 GZip 压缩,还是客户端决定,客户端要非压缩的数据,服务器就给非压缩的数据;客户端要压缩的数据,服务器就给压缩的数据。默认当然是不压缩啦。
那在 iOS 上该如何用呢?
以 ASIHTTPRequest 为例:
请求的时候设置allowCompressedResponse
为YES
即可。
可能遇到的问题:
如果服务器返回的不是 JSON 等数据,而是企图下载文件,且客户端依然请求 GZip,还是会被压缩(虽然这个压缩可能会越压越大)。强制不压缩,就是忽略那个 request header,可以这么做:
将HTTP_ACCEPT_ENCODING
设置为nil
即可。