Start · Sprachen · PHP · Referenz · apache_request_headers

apache_request_headers

Funktion

Gibt ein assoziatives Array aller HTTP-Request-Header zurück, die vom Client an den Server gesendet wurden.

seit PHP 4.3.0 Kategorie: misc

Signatur

apache_request_headers(): array|false

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, in dem die Schlüssel die Namen der HTTP-Header und die Werte die zugehörigen Header-Werte sind. Im Fehlerfall oder wenn die Funktion in der aktuellen SAPI-Umgebung nicht unterstützt wird, gibt sie 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;
    }
}
Host: www.example.com Accept: text/html,application/xhtml+xml Accept-Language: de-DE,de;q=0.9 Accept-Encoding: gzip, deflate, br User-Agent: Mozilla/5.0 ...

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.';
}
Token empfangen: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

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);
}
JSON-Daten empfangen: 3 Felder

// 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.