Wie füge ich einen benutzerdefinierten http-Header hinzu?

75

Ich möchte einer Ruby on Rails-App, die derzeit auf Heroku gehostet wird, benutzerdefinierte http-Header hinzufügen.

Jngai1297
quelle

Antworten:

124

Verwenden:

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

entweder in einer bestimmten Methode oder in einer before_filter-Methode Ihres Anwendungscontrollers, je nachdem, ob Sie diese in einer bestimmten oder in allen Ihren Antworten hinzufügen müssen.

UPDATE für Rails 5 - 24. Februar 2018

Wie von @BrentMatzelle in den Kommentaren für Rails 5 angegeben :

response.set_header('HEADER NAME', 'HEADER VALUE')
Lazarus Lazaridis
quelle
4
Stellen Sie sicher, dass der von Ihnen festgelegte Wert eine Zeichenfolge ist. Andernfalls führt pow zu seltsamen Fehlern
Avishai,
Um dies zu allen Aktionen in der Steuerung hinzuzufügen, verwenden Sie a after_action.
Hendrik
22

In Schienen 5 funktioniert die folgende Lösung (in Aktionsmethoden)

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

Referenz: edgeapi

Shakil
quelle
9

Legen Sie in Schienen 4 die Antwortheader in der Datei application.rb oder den entsprechenden Umgebungsdateien fest. Sobald Sie dies getan haben, können Sie den Header-Wert überall dort überschreiben, wo Sie ihn in der Steuerung benötigen. Weitere Informationen finden Sie in dieser URL .

Maniempire
quelle
9

In Rails 3 oder höher einfach

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

arbeitet in Controllern. Dies ist sogar der empfohlene Weg; gemäß der Dokumentation ,

Die Antwort ist meistens ein Ruby on Rails-Framework-Implementierungsdetail und sollte niemals direkt in Controllern verwendet werden. Controller sollten ActionController::Basestattdessen die in definierten Methoden verwenden. Wenn Sie beispielsweise den Inhalts-MIME-Typ der HTTP-Antwort festlegen möchten, verwenden Sie ActionController::Base#headersanstelle von Response#headers.

Und das ist immer noch wahr in Rails 6.0 .

Franklin Yu
quelle
3

In Schienen 4 funktioniert folgendes:

class API::V1::BaseController 
  after_action :set_version_header

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

Wenn Ihre Header statisch sind, z. B. Ihr eigener benutzerdefinierter Server-Header, können Sie ihn einfach aktualisieren config.action_dispatch.default_headers. Im folgenden Beispiel wird ein benutzerdefinierter Server-Header festgelegt . füge es deinem hinzu config/application.rboder config/environments/...:

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

(Vorausgesetzt, Sie setzen config.version früher eingestellt)

Weitere Informationen finden Sie unter Rails-Handbücher: Konfigurieren von Rails-Anwendungen: Konfigurieren des Aktionsversands :

config.action_dispatch.default_headers ist ein Hash mit HTTP-Headern, die standardmäßig in jeder Antwort festgelegt werden.

Dies ist bei jeder Anforderung weniger Arbeit als das Ausführen eines Controller-Rückrufs.

NB: Verwenden Sie für mehr als einen Header merge!, um vorhandene wichtige XSS-Header usw. nicht zu entfernen.

Wutanfall
quelle