使用RACK中间件获取客户端的请求类型

时间:2013-04-10 12:35:55

标签: ruby-on-rails xml rack

我有一个api请求说“host / something / abc.xml”,它不发送content_type。 Rails仍然知道它需要用xml响应并发送一个xml数据。如果同一客户端使用“host / something / abc”调用,则会发送回HTML。 (两者都没有CONTENT_TYPE)

我想知道它是怎么发生的?我想检查Rack中间件客户端请求的内容? XML或JSON或HTML(我没有内容类型)。 Rack :: Request中是否有任何方法可以检查它?我知道有一个方法content_type但它返回我的nil。但是还是rails用xml响应..怎么??

1 个答案:

答案 0 :(得分:0)

请参阅http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

Content-Type告诉您请求的类型Accept告诉服务器客户端想要什么作为响应

这应该将accept标头输出到控制台。

require 'rack'

class Accepter
  def initialize(app, options={})
    @app, @options = app, options
  end
  def call(env)
    accepts = env["HTTP_ACCEPT"]
    warn "accepts = #{accepts.inspect}"
    @app.call
  end
end