Signatur
Beschreibung
header_remove() ermöglicht es, einen oder alle zuvor mit header() registrierten HTTP-Antwortheader wieder zu entfernen, solange die Ausgabe noch nicht begonnen hat. Die Funktion ist nützlich, wenn in einem frühen Stadium des Skripts Header gesetzt wurden, die an einer späteren Stelle wieder zurückgenommen werden sollen – etwa in Middleware-Schichten oder Frameworks, die Header schrittweise aufbauen.
Wird der optionale Parameter name weggelassen, entfernt die Funktion alle zuvor registrierten Header. Dies kann sinnvoll sein, um einen sauberen Ausgangszustand für die Antwort herzustellen. Wird ein Name angegeben, ist der Vergleich case-insensitiv, da HTTP-Header-Namen per Definition unabhängig von Groß-/Kleinschreibung sind.
Wichtig: header_remove() beeinflusst nur Header, die explizit mit header() im aktuellen Skript gesetzt wurden. Standardmäßig von PHP generierte Header (z. B. Content-Type, X-Powered-By) können ebenfalls entfernt werden, sofern sie über header() oder php.ini übermittelt werden. Die Funktion muss aufgerufen werden, bevor irgendeine Ausgabe an den Client gesendet wird.
Typische Einsatzszenarien sind das Entfernen von Cache-Control-Headern, das Zurücknehmen von Weiterleitungs-Headern in Fehlerbehandlungsroutinen oder das Bereinigen von Headers in Test-Umgebungen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name | string | Der Name des zu entfernenden HTTP-Headers (z. B. "Cache-Control"). Die Angabe ist optional – wird der Parameter weggelassen, werden alle zuvor gesetzten Header entfernt. Der Vergleich ist case-insensitiv. |
Rückgabewert
Beispiele
Einzelnen Header entfernen
<?php
// Zunächst einen Cache-Control-Header setzen
header('Cache-Control: no-cache, no-store, must-revalidate');
header('X-Custom-Header: Beispielwert');
// Später entscheiden, Cache-Control wieder zu entfernen
header_remove('Cache-Control');
// Nur X-Custom-Header wird noch gesendet
foreach (headers_list() as $h) {
echo $h . PHP_EOL;
}
Alle Header auf einmal entfernen
<?php
// Verschiedene Header registrieren
header('Cache-Control: no-cache');
header('X-Frame-Options: DENY');
header('X-Content-Type-Options: nosniff');
// Alle Header auf einmal entfernen
header_remove();
// Ausgabe: leeres Array
var_dump(headers_list());
X-Powered-By-Header unterdrücken
<?php
// PHP sendet standardmäßig X-Powered-By
// Dieser kann über header_remove entfernt werden
header_remove('X-Powered-By');
// Alternativ: in der php.ini per expose_php = Off deaktivieren
echo 'X-Powered-By wurde entfernt.';
// Wichtig · Fallstricke
Ausgabe-Puffer beachten: Wie alle Header-Funktionen muss header_remove() aufgerufen werden, bevor irgendeine Ausgabe (auch Leerzeichen oder BOM) an den Client gesendet wird – es sei denn, der Ausgabe-Puffer (ob_start()) ist aktiv.
Vorsicht mit header_remove() ohne Argument: Wenn alle Header entfernt werden, gehen auch sicherheitsrelevante Header verloren, die z. B. von einem Framework gesetzt wurden (etwa Content-Security-Policy oder Strict-Transport-Security). Der Einsatz ohne Argument sollte daher bewusst und sparsam erfolgen.
Standardheader von PHP: Header wie Content-Type, die PHP automatisch setzt, können ebenfalls entfernt werden. Das kann dazu führen, dass der Browser den Inhaltstyp falsch interpretiert oder gar nicht erkennt. Im Zweifelsfall sollte nach dem Entfernen ein korrekter Content-Type-Header manuell gesetzt werden.