Промежуточное ПО Rails 3 модифицирует заголовки запросов - PullRequest
14 голосов
/ 05 августа 2011

Мои настройки: Rails 3.0.9, Ruby 1.9.2

Я работаю над своим первым приложением промежуточного программного обеспечения, и похоже, что все примеры касаются изменения ответа.В частности, мне нужно изучить и изменить заголовки запроса, удалить некоторые заголовки, которые вызывают ошибку в Rack 1.2.3.Вот типичное приложение Rack hello 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 для разбора.У меня есть такая настройка, и я думаю, что если поставить ее перед Rack, это может сработать, но я не уверен, что порядок выполнения будет соблюдаться таким образом.

application.rb

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

1 Ответ

16 голосов
/ 05 августа 2011

В вашем методе call вы сможете изменить env, то есть Rack Environment.Rack добавляет HTTP_ к каждому заголовку, поэтому к заголовку Accept можно получить доступ через env['HTTP_ACCEPT'].

Так что если вам нужно удалить определенные заголовки, вы сможете сделать что-то вроде env.delete('HTTP_ACCEPT').Затем, когда вы выполните @app.call(env), он будет использовать ваш измененный env.

. См. документацию по стойке для получения дополнительной информации об объекте env (см. "Среда").

...