rails中的HTTP压缩不适用于JSON响应

时间:2015-05-19 11:11:43

标签: ruby-on-rails ruby http nginx http-compression

我有rails 3.2.1 application和nginx。

在nginx配置中,我设置gzip on;,压缩适用于pages,css,js文件。

但它不适用于JSON响应。我发现rails的解决方案是将:config.middleware.use Rack::Deflater添加到a​​pplication.rb。

它有助于:在响应为45Kb之前,现在接近8Kb。

但是,现在我发现压缩仅适用于Mac Chrome,Mac Firefox和Windows Chrome。

对于IE 10,IE 11和Windows Firefox - 它不起作用:

  • 我在request-header中看到Accept-Encoding: gzip, deflate
  • 我在response-header中看不到Content-Encoding: gzip
  • 响应大小仍为45Kb。

请帮助。

1 个答案:

答案 0 :(得分:2)

通过将压缩配置从rails移动到nginx配置来解决。 我添加到<my_site>.conf


      # Enable Gzip
      gzip  on;
      gzip_http_version 1.0;
      gzip_comp_level 2;
      gzip_min_length 1100;
      gzip_buffers     4 8k;
      gzip_proxied any;
      gzip_types
        # text/html is always compressed by HttpGzipModule
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/json
        application/xml
        application/rss+xml
        font/truetype
        font/opentype
        application/vnd.ms-fontobject
        image/svg+xml;

      gzip_static on;

      gzip_proxied        expired no-cache no-store private auth;
      gzip_disable        "MSIE [1-6]\.";
      gzip_vary           on;

感谢@Alexey Ten寻求帮助。

它可以工作,但在IE中看不到压缩。 Windows上的一些安全程序捕获“gzipped”HTTP响应,从存档中提取,检查病毒并从响应标题中删除Content-Encoding: gzip。 IE像往常一样出色:)