在PUT请求中处理gzipped正文到heroku

Max*_*ams 3 ruby gzip ruby-on-rails heroku ruby-on-rails-3

我正在开发一个通过一个安静的xml界面与iphone应用程序通信的rails应用程序.自从他发送各种媒体以来,iphone应用程序开发人员想要抓住他的请求.我认为heroku会自动处理gzipped请求(http://adam.heroku.com/past/2009/4/22/gzip_makes_a_happy_web/),但它似乎没有:我得到一堆乱码的文本,通过它我不知道该怎么处理.

我需要设置我的heroku应用程序来处理这个设置吗?或者一个特定的标题他(iphone dev)需要发送他的请求告诉heroku如何处理它?

有点卡住,任何建议赞赏!谢谢,最大

ada*_*mar 5

我已经使用了这个要点中描述的方法来透明地解压缩gzipped请求体.Rails的重要部分是之前插入它ActionDispatch::ParamsParser.在config/environments/development.rbconfig/environments/production.rb:

config.middleware.insert_before ActionDispatch::ParamsParser, "CompressedRequests"
Run Code Online (Sandbox Code Playgroud)

将要点的内容放入文件中,lib/middleware/compressed_requests.rb并确保添加lib/middleware/到自动加载路径config/application.rb:

config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/middleware)
Run Code Online (Sandbox Code Playgroud)

使用此应用程序永远不会知道请求是gzip压缩的,它应该独立于任何支持机架的Web服务器.我已经将它与webrick和thin一起使用,没有任何问题.

编辑:使用gzip压缩请求正文的任何​​HTTP请求都应设置HTTP标头Content-Encoding: gzip.这是一个卷曲的示例测试:

gzip my_file.txt
curl --header 'Content-Encoding: gzip' --data-binary @my_file.txt.gz http://example.com/path
Run Code Online (Sandbox Code Playgroud)

  • 我把它打包成一个方便的栏杆宝石,你可以添加到你的rails应用程序,它会自动处理.https://rubygems.org/gems/degzipper (2认同)