Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的HTTP压缩不适用于JSON响应_Ruby On Rails_Ruby_Http_Nginx_Http Compression - Fatal编程技术网

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

Ruby on rails rails中的HTTP压缩不适用于JSON响应,ruby-on-rails,ruby,http,nginx,http-compression,Ruby On Rails,Ruby,Http,Nginx,Http Compression,我有rails 3.2.1应用程序和nginx 在nginx配置中,我将gzip设置为on,压缩适用于页面、css和js文件 但它不适用于JSON响应。我发现rails的解决方案是将:config.middleware.use Rack::Deflater添加到application.rb中 这也有帮助:以前的响应是45Kb,现在接近8Kb 但是,现在我发现压缩只适用于Mac Chrome、Mac Firefox和Windows Chrome 对于IE 10、IE 11和Windows Fire

我有rails 3.2.1应用程序和nginx

在nginx配置中,我将
gzip设置为on,压缩适用于页面、css和js文件

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

这也有帮助:以前的响应是45Kb,现在接近8Kb

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

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

  • 我在请求头中看到
    接受编码:gzip,deflate
  • 我没有在响应头中看到
    内容编码:gzip
  • 响应大小仍然是45Kb

请提供帮助。

通过将压缩配置从rails移动到nginx配置来修复。 我添加到
.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上的一些安全程序捕获“gzip”HTTP响应,从存档中提取,检查病毒,并从响应头中删除
内容编码:gzip
。IE一如既往的优秀:)

也许你只需要修改
gzip_类型
来包含
application/json
@AlexeyTen,谢谢,我会试试。@AlexeyTen但为什么它只在Mac和Chrome上工作?)我想,你不知道,因为nginx将执行gzip。您可以在后端压缩响应,然后,如果您有代理集,nginx将不再尝试gzip它。头接受编码“gzip”;当然,Nginx提供了一种更好的压缩配置。所以Alexey十对,不要压缩Ruby端,让Nginx来处理