Rails 3中间件修改请求标头

Bob*_*Bob 15 rack middleware ruby-on-rails-3

我的设置: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
Run Code Online (Sandbox Code Playgroud)

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

application.rb

config.middleware.insert_before Rack::Lock, "MyMiddleware"
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kow 17

在您的call方法中,您应该能够修改env,即Rack Environment.机架前HTTP_置于每个标头,因此Accept可以通过标头访问标头env['HTTP_ACCEPT'].

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

有关env对象的更多信息,请参阅Rack文档(请参阅"环境").