Ruby on rails Gzip在Rails/Passenger/Nginx中解压JSON柱体

Ruby on rails Gzip在Rails/Passenger/Nginx中解压JSON柱体,ruby-on-rails,ruby,json,compression,gzip,Ruby On Rails,Ruby,Json,Compression,Gzip,我们的Rails代码中有一个函数,它接受JSON POST正文: contacts = ActiveSupport::JSON.decode(request.raw_post.gsub("+", "")) 我知道我也可以从params[_json]中得到这个,但是我们有非常大的MBs POST body,出于某种原因没有放入params[_json],并且+也会抛出错误 由于JSON通常是从移动客户端发送的,因此优化上传大小对我们来说很重要。我们想切换到有邮政机构gzip 但是,无论我们做什么

我们的Rails代码中有一个函数,它接受JSON POST正文:

contacts = ActiveSupport::JSON.decode(request.raw_post.gsub("+", ""))
我知道我也可以从params[_json]中得到这个,但是我们有非常大的MBs POST body,出于某种原因没有放入params[_json],并且+也会抛出错误

由于JSON通常是从移动客户端发送的,因此优化上传大小对我们来说很重要。我们想切换到有邮政机构gzip

但是,无论我们做什么,我们都会得到相同的错误,没有行号:

MultiJson::DecodeError (743: unexpected token at ''):
我们已尝试:

  gzipped_contacts = Zlib::GzipReader.new(StringIO.new(request.raw_post)).read
  contacts = ActiveSupport::JSON.decode(gzipped_contacts.gsub("+", ""))
这:

解决方案如下:


我非常确定这不会发生在控制器级别,因为我无法在那里记录任何内容,因此需要在中间件或服务器上完成,但我找不到任何让我们泄气的Nginx。请协助

好的,原来iPhone客户端发送了错误的标题。因此,任何遇到这种情况的人都可以在这里看到建议:

并验证您正在发送内容类型:gzip/json

   gzipped_contacts = ActiveSupport::Gzip.decompress(request.raw_post)
   contacts = ActiveSupport::JSON.decode(gzipped_contacts.gsub("+", ""))