我希望将自定义http标头添加到当前托管在Heroku上的Ruby on Rails应用程序中。
答案 0 :(得分:102)
使用:
response.headers['HEADER NAME'] = 'HEADER VALUE'
在应用程序控制器的特定方法或before_filter方法中,具体取决于您是否需要将其添加到特定或所有响应中。
@BrentMatzelle在评论中指出,Rails 5:
response.set_header('HEADER NAME', 'HEADER VALUE')
答案 1 :(得分:19)
答案 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
。
答案 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.rb
或config/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等头。