如何添加自定义http标头?

时间:2013-05-20 16:32:21

标签: ruby-on-rails http http-headers

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

6 个答案:

答案 0 :(得分:102)

使用:

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

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

Rails的更新5 - 2018年2月24日

@BrentMatzelle在评论中指出,Rails 5

response.set_header('HEADER NAME', 'HEADER VALUE')

答案 1 :(得分:19)

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

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

参考:edgeapi

答案 2 :(得分:7)

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

答案 3 :(得分:5)

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

WSGIDaemonProcess brunamaiahair.com.br socket-user=#1004 python-path=/home/bmhair/public_html/django/framework:/home/bmhair/public_html/django/denv/lib/python2.7/site-packages

WSGIProcessGroup brunamaiahair.com.br

WSGIScriptAlias / /home/bmhair/public_html/django/framework/framework/wsgi.py

在控制器中工作。这甚至是 推荐的方式;根据{{​​3}},

  

响应主要是Ruby on Rails框架实现细节,不应该直接在控制器中使用。控制器应该使用headers['Header-Name'] = 'header value' 中定义的方法。例如,如果要设置HTTP响应的内容MIME类型,请使用ActionController::Base而不是ActionController::Base#headers

the documentation

答案 4 :(得分:2)

在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

答案 5 :(得分:0)

如果标题是静态的,例如您自己的自定义服务器头,则只需更新config.action_dispatch.default_headers。以下示例设置了自定义Server header;将其添加到您的config/application.rbconfig/environments/...中:

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

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

有关更多信息,请参见Rails Guides: Configuring Rails Applications: Configuring Action Dispatch

config.action_dispatch.default_headers是带有HTTP标头的哈希,默认情况下,每个响应中都设置了HTTP标头。

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

NB:对于多个头,请使用merge!来删除现有的基本XSS等头。