Rails 3中间件修改请求标头

发布于 2024-11-28 09:44:26 字数 583 浏览 3 评论 0原文

我的设置: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"

My setup: Rails 3.0.9, Ruby 1.9.2

I am working on my first middleware app and it seems like all of the examples deal with modify the response. I need to examine and modify the request headers in particular, delete some offending headers that cause a bug in Rack 1.2.3 to choke. Here's the typical hello world Rack app.

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

Does anyone have an example that deals with the request headrers and intercepting them before Rack gets hold of it? I need to modify the request headers before it gets to Rack for parsing. I have this setup, thinking that putting it before Rack might do the trick but I am not sure if order of execution is enforced in this manner.

application.rb

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

分开我的手 2024-12-05 09:44:26

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

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

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

In your call method, you should be able to modify env, which is the Rack Environment. Rack prepends HTTP_ to each header, so the Accept header would be accessed via env['HTTP_ACCEPT'].

So if you need to delete certain headers, you should be able to do something like env.delete('HTTP_ACCEPT'). Then when you do @app.call(env), it will use your modified env.

See the Rack documentation for more information on the env object (see "The Environment").

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文