ruby 在Rack中间件中如何忽略默认头?

hxzsmxv2  于 2023-05-22  发布在  Ruby
关注(0)|答案(1)|浏览(99)

我想使用这个request = Rack::Request.new(env)来记录request.env中存在的头,但这里的问题是它不仅包含我们正在传递的additional headers,而且还包含默认头,如何忽略它并只打印additional headers

ujv3wf0j

ujv3wf0j1#

要在Ruby on Rails中读取和记录HTTP头,不需要中间件或gem。因为Rails已经包含了对头文件和日志的访问。
我会在application_controller.rb中添加一个小的before_action来添加我感兴趣的特定头,如下所示:

# in app/controllers/application_controller.rb
before_filer :log_headers

private

def log_headers
  Rails.looger.info "My API key: #{request.headers['MY-API-KEY']}"
end

或者你可以记录所有的头,除了一些,像这样:

def log_headers
  headers_to_exclude = ['FOO', 'BAR']
  headers_of_interest = request.headers.env.except(*headers_to_exclude)

  Rails.looger.info "headers: #{headers_of_interest}"
end

或者你只能记录显式命名的头,像这样:

def log_headers
  headers_to_include = ['FOO', 'BAR']
  headers_of_interest = request.headers.env.slice(*headers_to_include)

  Rails.looger.info "headers: #{headers_of_interest}"
end

要包含或排除的头列表可以提取到常量中,逻辑可以放入关注点中。

相关问题