如何添加自定义的HTTP标头?


Answers:


127

采用:

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

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

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

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

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

4
请确保您设置的值是一个字符串,否则战俘会给你奇怪的错误
Avishai

要将其添加到控制器中的所有动作中,请使用after_action
亨德里克

22

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

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

参考:edgeapi


9

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


9

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

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

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

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

这仍是Rails的6.0属实



0

如果您的标头是静态的,例如您自己的自定义服务器标头,则只需更新即可config.action_dispatch.default_headers。下面的示例设置一个自定义的Server标头;将其添加到您的config/application.rbconfig/environments/...

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

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

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

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

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

注意:对于多个头,请使用merge!不删除现有的必要XSS等头。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.