78

我希望将自定义 http 标头添加到当前托管在 Heroku 上的 Ruby on Rails 应用程序中。

4

6 回答 6

128

利用:

response.headers['HEADER NAME'] = 'HEADER VALUE'

在特定方法中或应用程序控制器的 before_filter 方法中,具体取决于您是否需要将其添加到特定或所有响应中。

Rails 5 更新 - 2018 年 2 月 24 日

正如@BrentMatzelle 在评论中指出的那样,对于Rails 5

response.set_header('HEADER NAME', 'HEADER VALUE')
于 2013-05-20T16:40:00.563 回答
23

在 rails 5 中,以下解决方案有效(在行动方法中)

response.set_header("Header-Name", "Header value")

参考:edgeapi

于 2016-12-24T07:42:06.197 回答
13

在 Rails 3 或更高版本中,只需

headers['Header-Name'] = 'header value'

在控制器中工作。这甚至推荐的方式;根据文档

响应主要是 Ruby on Rails 框架的实现细节,不应该直接在控制器中使用。控制器应该使用定义的方法ActionController::Base。例如,如果要设置 HTTP 响应的内容 MIME 类型,则ActionController::Base#headers使用Response#headers.

在 Rails 6.0 中仍然适用

于 2017-06-25T05:25:40.133 回答
9

在 rails 4 中,在 application.rb 或相应的环境文件中设置响应标头。完成此操作后,您可以在控制器中所需的任何位置覆盖标头值。有关更多详细信息,请参阅此网址

于 2015-09-28T06:16:47.533 回答
4

在 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
于 2017-02-21T08:17:52.370 回答
2

如果您的标头是静态的,例如您自己的自定义服务器标头,您可以简单地更新config.action_dispatch.default_headers. 以下示例设置自定义服务器标头;将其添加到您的config/application.rbor中config/environments/...

config.action_dispatch.default_headers["Server"] = "MyServer/#{config.version}"

(假设您config.version之前设置)

有关更多信息,请参阅Rails 指南:配置 Rails 应用程序:配置操作调度

config.action_dispatch.default_headers是一个带有 HTTP 标头的散列,默认情况下在每个响应中设置。

与运行控制器回调相比,这将减少每个请求的工作量。

注意:对于多个标头merge!,请不要删除现有的基本 XSS 等标头。

于 2020-07-24T22:02:14.203 回答