强制所有Rails 404/500响应中的标头

时间:2015-07-14 22:12:40

标签: ruby-on-rails

我正在尝试在我的Rails应用程序返回的所有响应上设置'X-Frame-Options'标头。似乎此标头在404或500类型响应上设置而不是。如何将Rails配置为始终包含此标题?

似乎我需要挂钩到Rails以确保始终设置这些标头。

2 个答案:

答案 0 :(得分:0)

我使用下面的中间件作为我的'exceptions_app'成功了。

class XSecurityHandler
  def initialize(app)
    @app = app
  end

  def call(env)
    _status, headers, response = @app.call(env)
    headers['X-Frame-Options'] = "SAMEORIGIN"
    headers['X-Content-Type-Options'] = "nosniff"
    [status(env), headers, response]
  end

  private
  def status(env)
    path = env["ORIGINAL_FULLPATH"]
    if path == "/404"
      404
    elsif path == "/422"
      422
    else
      500
    end
  end
end

答案 1 :(得分:-1)

config / application.rb 中设置默认标题:

config.action_dispatch.default_headers['X-Frame-Options'] = 'SAMEORIGIN'

但它不会工作,如果你配置了反向代理(如nginx)来提供不存在的静态资产(404),但我想你知道这一点:)