web-dev-qa-db-fra.com

Comment ajouter un en-tête http personnalisé?

Je cherche à ajouter des en-têtes http personnalisés à une application Ruby on Rails actuellement hébergée sur Heroku).

65
Jngai1297

Utilisation:

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

soit dans une méthode spécifique, soit dans une méthode before_filter de votre contrôleur d'application selon que vous avez besoin que cela soit ajouté dans une réponse spécifique ou à toutes vos réponses.

MISE À JOUR pour Rails 5 - 24 février 2018

Comme indiqué par @BrentMatzelle dans les commentaires, pour Rails 5 :

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

Dans Rails 5, la solution suivante fonctionne (dans les méthodes d'action)

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

Référence: edgeapi

21
Shakil

Dans Rails 4, définissez les en-têtes de réponse dans le fichier application.rb ou les fichiers d'environnement respectifs. Une fois que vous avez fait cela, vous pouvez remplacer la valeur d'en-tête où vous le souhaitez dans le contrôleur. Reportez-vous à cette rl pour plus de détails.

7
maniempire

Dans Rails 3 ou plus, simplement

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

fonctionne dans les contrôleurs. C'est même la manière recommandée; selon la documentation ,

La réponse est principalement un Ruby on Rails détail d'implémentation du framework, et ne doit jamais être utilisé directement dans les contrôleurs. Les contrôleurs doivent utiliser les méthodes définies dans ActionController::Base au lieu. Par exemple, si vous souhaitez définir le type MIME du contenu de la réponse HTTP, utilisez ActionController::Base#headers au lieu de Response#headers.

Et cela est toujours vrai dans Rails 5.2 .

5
Franklin Yu

Dans Rails 4 fonctionne comme suit:

class API::V1::BaseController 
  after_action :set_version_header

  protected
    def set_version_header
        response.headers['X-ComanyName-Api-Version'] = 'V1'
    end
end
2
Slava Zharkov