mod_headers Anpassung von Anfrage- und Antwort-Headern Erweiterung mod_headers.c headers_module RequestHeader steht erst seit der Apache-Version 2.0 zur Verfügung.

Dieses Modul enthält Direktiven zur Kontrolle und zum Verändern von Anfrage- und Antwort-Headern. Header können zusammengemischt, ersetzt oder entfernt werden.

Reihenfolge der Verarbeitung

Die Direktiven des Moduls mod_headers können fast an jeder Position innerhalb der Serverkonfiguration stehen. Sie sind im Hauptabschnitt der Serverkonfiguration und in den Abschnitten der virtuellen Hosts innerhalb der Directory-, Location- und Files-Abschnitte sowie innerhalb der .htaccess-Dateien zulässig.

Die Direktiven werden in der folgenden Reihenfolge verarbeitet:

  1. main server
  2. virtual host
  3. Directory-Abschnitte und .htaccess
  4. Files
  5. Location

Die Reihenfolge ist wichtig. Die beiden folgenden Header führen zu unterschiedlichen Ergebnissen, wenn die Reihenfolge umgekehrt wird:

RequestHeader append MirrorID "mirror 12"
RequestHeader unset MirrorID

Bei dieser Reihenfolge wird der MirrorID-Header nicht gesetzt. Bei umgekehrter Reihenfolge wird der MirrorID-Header auf "mirror 12" gesetzt.

Beispiele
  1. Alle Anfrage-Header, die mit "TS" beginnen, werden in die Antwort-Header kopiert: Header echo ^TS
  2. Der Header MyHeader sowie ein Zeitstempel für den Eingang der Anfrage und die Dauer der Bearbeitung der Antwort werden hinzufügt. Dieser Header kann vom Client als Hinweis auf die Serverbelastung oder zum Aufspüren eventueller Engpässe zwischen Client und Server verwendet werden. Header add MyHeader "%D %t"

    Folgender Header wird der Antwort hinzugefügt:

    MyHeader: D=3775428 t=991424704447256
  3. Die Anweisung Header add MyHeader "Hello Joe. It took %D microseconds \
    for Apache to serve this request."

    führt dazu, dass dieser Header der Antwort hinzugefügt wird:

    MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
  4. MyHeader wird nur dann mit der Antwort gesendet, wenn der Header "MyRequestHeader" in der Anfrage enthalten ist. Das bei Headern sinnvoll, die als Reaktion auf einen Auslöser seitens des Clients gesendet werden sollen. Beachten Sie, daß für dieses Beispiel das Modul mod_setenvif benötigt wird. SetEnvIf MyRequestHeader value HAVE_MyRequestHeader
    Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader

    Ist der Header MyRequestHeader: value in der HTTP-Anfrage vorhanden, dann enthält die Antwort den folgenden Header:

    MyHeader: D=3775428 t=991424704447256 mytext
RequestHeader Konfiguration von HTTP-Anfrage-Headern RequestHeader set|append|add|unset Header [Wert] server configvirtual host directory.htaccess FileInfo

Diese Direktive kann HTTP-Anfrage-Header ersetzen, verbinden oder entfernen. Der Header wird unmittelbar vor der Ausführung des Content-Handlers modifiziert. Die durchzuführende Aktion wird mit dem ersten Argument angegeben:

set
Der Anfrage-Header wird gesetzt und ersetzt sämtliche vorhandenen Header mit dieser Bezeichnung
append
Der Anfrage-Header wird an vorhandene Header mit der gleichen Bezeichnung angehängt. Wird ein neuer Wert mit einen vorhandenen Header gemischt, dann wird er mit einem Komma vom vorhandenen Header getrennt. Das entspricht dem HTTP-Standard für die Zuweisung mehrerer Werte für einen Header.
add
Der Anfrage-Header wird den vorhandenen Headern hinzugefügt, auch wenn er bereits vorhanden ist. Das kann dazu führen, dass zwei (oder mehr) Header den gleichen Namen haben, was unvorhergesehene Konsequenzen nach sich ziehen kann. Im Allgemeinen sollte stattdessen append verwendet werden.
unset
Der Anfrage-Header mit dieser Bezeichnung wird entfernt, falls er vorhanden ist. Gibt es mehrere Header mit gleichem Namen, werden alle entfernt.

Auf dieses Argument folgt ein Header-Name, auf den ein Doppelpunkt folgen kann, was jedoch nicht erforderlich ist. Groß- und Kleinschreibung werden ignoriert. Bei add, append und set wird als drittes Argument ein Wert angegeben. Enthält der Wert Leerzeichen, sollten diese in doppelte Anführungszeichen gesetzt werden. Bei unset sollte kein Wert angegeben werden.

Die RequestHeader-Direktive wird vor der Bearbeitung vom Handler in der Vorbereitungsphase ausgeführt. Auf diese Weise sollen vom Browser oder von Apache- Eingabefiltern erzeugte Header überschrieben oder modifiziert werden können.

Header Konfiguration von HTTP-Antwort-Headern Header set|append|add|unset|echo Header [Wert [env=[!]Variable]] server configvirtual host directory.htaccess FileInfo

Diese Direktive kann HTTP-Antwort-Header ersetzen, modifizieren oder entfernen. Der Header wird unmittelbar nach der Ausführung der Content-Handler und Ausgabefilter modifiziert, so dass ausgehende Header geändert werden können. Die durchzuführende Aktion wird mit dem ersten Argument angegeben. Folgende Werte können angegeben werden:

set
Setzt den Antwort-Header und ersetzt gleichzeitig alle bisherigen Header mit demselben Namen. Der Wert kann ein Format-String sein.
append
Der Antwort-Header wird an einen vorhandenen Header mit der gleichen Bezeichnung angehängt. Wird ein neuer Wert in einen vorhandenen Header eingebunden, wird er mit einem Komma vom vorhandenen Header getrennt. Dies entspricht dem HTTP-Standard für die Zuweisung mehrerer Werte für einen Header.
add
Der Antwort-Header wird den vorhandenen Headern hinzugefügt, auch wenn er bereits existiert. Das kann dazu führen, dass zwei (oder mehr) Header die gleiche Bezeichnung haben, was zu unvorhergesehenen Konsequenzen führen kann. Im Allgemeinen ist daher "append" vorzuziehen.
unset
Der Antwort-Header mit dieser Bezeichnung wird falls vorhanden entfernt. Gibt es mehrere Header mit dem gleichen Namen, werden alle entfernt.
echo
Anfrage-Header mit dieser Bezeichnung werden als Antwort-Header zurückgeliefert. Header kann ein regulärer Ausdruck sein.

Auf dieses Argument folgt ein Header-Name, der mit einem Doppelpunkt abgeschlossen werden kann, was jedoch nicht erforderlich ist. Groß- und Kleinschreibung werden bei set, append, add und unset ignoriert. Beim Header-Namen für echo werden Groß- und Kleinschreibung unterschieden; es darf auch ein regulärer Ausdruck angegeben werden.

Bei add, append und set wird mit dem dritten Argument ein Wert angegeben. Enthält der Wert Leerzeichen, dann sollten diese in doppelte Anführungszeichen gesetzt werden. Beim Wert kann es sich um eine Zeichenfolge, einen String mit Formatangaben oder um eine Kombination von beidem handeln. Die folgenden Formatangaben für den Wert sind zulässig:

%t Der Zeitpunkt, zu dem die Anfrage eingegangen ist, in Universal Coordinated Time (UTC-Zeit), gemessen in Millisekunden seit dem 1. Januar 1970. Dem Wert wird t= vorangestellt.
%D Die Zeit vom Eingang der Anfrage bis zum Versenden der Header. Dieser Wert ist ein Anhaltspunkt für die Bearbeitungsdauer der Anfrage. Dem Wert wird D= vorangestellt.
%{FOOBAR}e Der Wert der Umgebungsvariablen FOOBAR.

Wird die Header-Direktive in Verbindung mit den Argumenten add, append oder set verwendet, können mit einem vierten Argument Bedingungen angegeben werden, unter denen die Aktion durchgeführt wird. Existiert die mit dem env=... Argument angegebene Umgebungsvariable (oder existiert sie nicht, falls 'env=!...' angegeben wurde), dann wird die mit der Header-Direktive angegebene Aktion durchgeführt. Andernfalls hat die Direktive keine Auswirkungen auf die Anfrage.

Die Header-Direktiven werden unmittelbar vor dem Versenden der Antwort bearbeitet. Das bedeutet, dass die meisten Header (mit Ausnahme der vom Header-Filter hinzugefügten) gesetzt und/oder überschrieben werden können.