我的设置: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"
答案 0 :(得分:16)
在call
方法中,您应该能够修改env
,即Rack环境。 Rack会在每个标头前加HTTP_
,因此可以通过Accept
访问env['HTTP_ACCEPT']
标头。
因此,如果您需要删除某些标题,则应该可以执行env.delete('HTTP_ACCEPT')
之类的操作。然后当您执行@app.call(env)
时,它将使用您修改后的env
。
有关env
对象的更多信息,请参阅the Rack documentation。(请参阅“环境”)。