Изменить заголовки запроса промежуточного программного обеспечения Rails 3
Моя настройка: Rails 3.0.9, Ruby 1.9.2
Я работаю над своим первым программным обеспечением промежуточного программного обеспечения, и кажется, что все примеры касаются изменения ответа. Мне нужно изучить и изменить заголовки запросов, в частности, удалить некоторые заголовки, которые вызывают ошибку в Rack 1.2.3. Здесь типичное приложение для приложений Rack World приветствия.
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 for parsing. У меня есть эта настройка, и я думаю, что поставить ее перед тем, как Rack может сделать трюк, но я не уверен, что порядок исполнения выполняется таким образом.
application.rb
config.middleware.insert_before Rack::Lock, "MyMiddleware"
Ответы
Ответ 1
В вашем методе call
вы можете изменить env
, который является средой Rack. Rack добавляет HTTP_
к каждому заголовку, поэтому заголовок Accept
будет доступен через env['HTTP_ACCEPT']
.
Итак, если вам нужно удалить определенные заголовки, вы должны сделать что-то вроде env.delete('HTTP_ACCEPT')
. Затем, когда вы сделаете @app.call(env)
, он будет использовать ваш измененный env
.
Подробнее о объекте env
см. документацию в стойке (см. "Окружающая среда" ).