我想将自定义http标头添加到当前托管在Heroku上的Ruby on Rails应用中。
Answers:
采用:
response.headers['HEADER NAME'] = 'HEADER VALUE'
在特定方法中还是在应用程序控制器的before_filter方法中,具体取决于您是需要将其添加到特定响应中还是添加到所有响应中。
正如@BrentMatzelle在评论中指出的,对于Rails 5:
response.set_header('HEADER NAME', 'HEADER VALUE')
    after_action。
                    在Rails 3或更高版本中,只需
headers['Header-Name'] = 'header value'
在控制器中工作。这甚至是推荐的方法。根据文档,
响应主要是Ruby on Rails框架的实现细节,决不能直接在控制器中使用。控制器应
ActionController::Base改为使用中定义的方法。例如,如果要设置HTTP响应的内容MIME类型,请使用ActionController::Base#headers代替Response#headers。
在rails中,以下4个工作:
class API::V1::BaseController 
  after_action :set_version_header
  protected
    def set_version_header
        response.headers['X-ComanyName-Api-Version'] = 'V1'
    end
end
    如果您的标头是静态的,例如您自己的自定义服务器标头,则只需更新即可config.action_dispatch.default_headers。下面的示例设置一个自定义的Server标头;将其添加到您的config/application.rb或config/environments/...:
config.action_dispatch.default_headers["Server"] = "MyServer/#{config.version}"
(假设您设置了 config.version之前过)
有关更多信息,请参见Rails指南:配置Rails应用程序:配置操作调度:
config.action_dispatch.default_headers是具有HTTP标头的哈希,默认情况下,每个响应中都设置了HTTP标头。
与运行控制器回调相比,每个请求的工作量更少。
注意:对于多个头,请使用merge!不删除现有的必要XSS等头。