Rails 3中间件修改请求标头

时间:2011-08-05 16:49:30

标签: ruby-on-rails-3 rack middleware

我的设置:Rails 3.0.9,Ruby 1.9.2

我正在开发我的第一个中间件应用程序,似乎所有示例都涉及修改响应。我需要检查和修改请求标头,特别是删除导致Rack 1.2.3中的错误的一些有问题的标头。这是典型的hello world Rack应用程序。

my_middleware.rb

class MyMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    @status, @headers, @response = @app.call(env)
    [@status, @headers, @response]
  end
end

有没有人有一个例子来处理请求头部并在Rack获取它之前拦截它们?我需要在进入Rack进行解析之前修改请求标头。我有这个设置,认为把它放在Rack之前可能会做到这一点,但我不确定是否以这种方式强制执行。

application.rb

config.middleware.insert_before Rack::Lock, "MyMiddleware"

1 个答案:

答案 0 :(得分:16)

call方法中,您应该能够修改env,即Rack环境。 Rack会在每个标头前加HTTP_,因此可以通过Accept访问env['HTTP_ACCEPT']标头。

因此,如果您需要删除某些标题,则应该可以执行env.delete('HTTP_ACCEPT')之类的操作。然后当您执行@app.call(env)时,它将使用您修改后的env

有关env对象的更多信息,请参阅the Rack documentation。(请参阅“环境”)。