Signatur
Beschreibung
apache_request_headers() liest alle HTTP-Header aus der aktuellen Anfrage des Clients und gibt sie als assoziatives Array zurück, wobei die Schlüssel die Header-Namen und die Werte die entsprechenden Header-Werte sind. Die Funktion ist besonders nützlich, um clientseitige Metadaten wie Accept, Authorization, Content-Type oder benutzerdefinierte Header auszuwerten.
Obwohl der Name auf Apache hindeutet, ist diese Funktion auch unter anderen Webservern und SAPI-Umgebungen verfügbar – darunter FastCGI und die eingebauten PHP-Webserver. Als Alias steht seit PHP 5.5.0 die Funktion getallheaders() zur Verfügung, die identisch funktioniert und bevorzugt werden sollte, wenn Serverunabhängigkeit gewünscht ist.
Ein typischer Anwendungsfall ist die Auswertung von Authentifizierungs-Headern (z. B. Bearer-Token in Authorization), die Prüfung von Content-Negotiation-Headern (Accept, Accept-Language) oder das Debugging von Anfragen. Die Funktion gibt die Header-Namen in ihrer originalen Schreibweise zurück, wobei die erste Schreibweise je nach Webserver variieren kann.
Wichtig: Im CLI-Modus (Command Line Interface) ist diese Funktion nicht verfügbar und gibt false zurück. Ebenso kann sie in bestimmten SAPI-Umgebungen fehlen oder eingeschränkt sein.
Rückgabewert
false zurück.Beispiele
Alle Request-Header ausgeben
<?php
$headers = apache_request_headers();
if ($headers === false) {
echo 'Header konnten nicht abgerufen werden.';
} else {
foreach ($headers as $name => $value) {
echo htmlspecialchars($name) . ': ' . htmlspecialchars($value) . PHP_EOL;
}
}
Bearer-Token aus Authorization-Header auslesen
<?php
$headers = apache_request_headers();
$token = null;
if (isset($headers['Authorization'])) {
$authHeader = $headers['Authorization'];
if (str_starts_with($authHeader, 'Bearer ')) {
$token = substr($authHeader, 7);
}
}
if ($token !== null) {
// Token validieren...
echo 'Token empfangen: ' . htmlspecialchars($token);
} else {
http_response_code(401);
echo 'Kein gültiger Authorization-Header gefunden.';
}
Content-Type der Anfrage prüfen
<?php
$headers = apache_request_headers();
$contentType = $headers['Content-Type'] ?? $headers['content-type'] ?? '';
if (str_contains($contentType, 'application/json')) {
$body = file_get_contents('php://input');
$data = json_decode($body, true);
echo 'JSON-Daten empfangen: ' . count($data) . ' Felder';
} else {
echo 'Kein JSON-Body erwartet. Content-Type: ' . htmlspecialchars($contentType);
}
// Wichtig · Fallstricke
Groß-/Kleinschreibung der Header-Namen: Die Schreibweise der Schlüssel im Rückgabe-Array hängt vom Webserver und der SAPI ab. Manche Umgebungen normalisieren Header-Namen (z. B. zu Content-Type), andere liefern sie in Kleinbuchstaben. Greife daher sicherheitshalber case-insensitiv auf Header zu oder normalisiere die Schlüssel mit array_change_key_case().
Sicherheitshinweis: Da HTTP-Header vom Client frei gesetzt werden können, sollten alle Header-Werte als nicht vertrauenswürdige Eingabe behandelt werden. Validiere und sanitisiere Header-Werte stets vor der Weiterverwendung, um Header-Injection oder andere Angriffe zu verhindern.
CLI-Umgebung: In der Kommandozeile (CLI) ist diese Funktion nicht verfügbar. Prüfe daher den Rückgabewert auf false. Als Alternative ohne SAPI-Abhängigkeit kann getallheaders() verwendet werden, welches ab PHP 5.5.0 als serverunabhängiger Alias existiert.