我希望将自定义 http 标头添加到当前托管在 Heroku 上的 Ruby on Rails 应用程序中。
6 回答
利用:
response.headers['HEADER NAME'] = 'HEADER VALUE'
在特定方法中或应用程序控制器的 before_filter 方法中,具体取决于您是否需要将其添加到特定或所有响应中。
Rails 5 更新 - 2018 年 2 月 24 日
正如@BrentMatzelle 在评论中指出的那样,对于Rails 5:
response.set_header('HEADER NAME', 'HEADER VALUE')
在 Rails 3 或更高版本中,只需
headers['Header-Name'] = 'header value'
在控制器中工作。这甚至是推荐的方式;根据文档,
响应主要是 Ruby on Rails 框架的实现细节,不应该直接在控制器中使用。控制器应该使用定义的方法
ActionController::Base
。例如,如果要设置 HTTP 响应的内容 MIME 类型,则ActionController::Base#headers
使用Response#headers
.
在 rails 4 中,在 application.rb 或相应的环境文件中设置响应标头。完成此操作后,您可以在控制器中所需的任何位置覆盖标头值。有关更多详细信息,请参阅此网址。
在 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
. 以下示例设置自定义服务器标头;将其添加到您的config/application.rb
or中config/environments/...
:
config.action_dispatch.default_headers["Server"] = "MyServer/#{config.version}"
(假设您config.version
之前设置)
有关更多信息,请参阅Rails 指南:配置 Rails 应用程序:配置操作调度:
config.action_dispatch.default_headers
是一个带有 HTTP 标头的散列,默认情况下在每个响应中设置。
与运行控制器回调相比,这将减少每个请求的工作量。
注意:对于多个标头merge!
,请不要删除现有的基本 XSS 等标头。