我想将自定义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等头。