Signatur
Beschreibung
Die Methode keys() eines Headers-Objekts gibt einen Iterator zurück, der nacheinander die Namen aller enthaltenen HTTP-Header liefert. Diesen Iterator kannst du mit for...of, dem Spread-Operator oder mit Array.from() durchlaufen.
Die Namen werden immer kleingeschrieben und lexikografisch sortiert ausgegeben, egal in welcher Reihenfolge und Schreibweise sie gesetzt wurden. Wurde ein Header mehrfach mit append() hinzugefügt, erscheint sein Name trotzdem nur einmal, weil die Werte intern zusammengefasst werden. Davon gibt es eine Ausnahme: set-cookie wird für jeden einzelnen Wert gesondert geliefert.
Typische Einsatzfälle sind das Debuggen und Protokollieren von Anfrage- oder Antwort-Headern, das Prüfen, welche Header eine Antwort überhaupt mitbringt, oder das Umwandeln in ein einfaches Objekt bzw. Array. Brauchst du Name und Wert zusammen, ist entries() meist die bessere Wahl. Für die reinen Werte gibt es values().
Rückgabewert
Beispiele
Header-Namen mit for...of ausgeben
const headers = new Headers({
'X-Request-Id': 'abc123',
'Content-Type': 'application/json',
Accept: 'text/html'
});
for (const name of headers.keys()) {
console.log(name);
}
Header einer fetch-Antwort protokollieren
const logResponseHeaders = async (url) => {
const response = await fetch(url);
const names = [...response.headers.keys()];
console.log(`${names.length} Header empfangen:`, names.join(', '));
return names;
};
logResponseHeaders('https://example.com/api/status');
Mehrfach gesetzte Header erscheinen nur einmal
const headers = new Headers();
headers.append('Accept-Language', 'de');
headers.append('accept-language', 'en');
console.log(Array.from(headers.keys()));
console.log(headers.get('accept-language'));
Header-Namen filtern (z. B. eigene X-Header)
const headers = new Headers({
'X-Trace': '1',
'X-Client': 'web',
Authorization: 'Bearer token'
});
const custom = [...headers.keys()].filter((name) => name.startsWith('x-'));
console.log(custom);
// Wichtig · Fallstricke
- Kleinschreibung: Alle Namen kommen kleingeschrieben zurück. Wenn du Header-Namen vergleichst, solltest du deshalb immer mit kleingeschriebenen Zeichenketten vergleichen, zum Beispiel mit
'content-type'. - Sortierung: Die ursprüngliche Einfügereihenfolge geht verloren. Die Ausgabe ist immer alphabetisch sortiert.
- CORS: Bei Cross-Origin-Antworten liefert
response.headers.keys()nur die CORS-sicheren Antwort-Header, etwacontent-typeodercache-control. Andere Header sind nur sichtbar, wenn der Server sie überAccess-Control-Expose-Headersfreigibt. Beiopaque-Antworten (mode: 'no-cors') ist der Iterator leer. - Verbotene Header: Bestimmte Header, zum Beispiel
Cookiein Anfragen, lassen sich im Browser nicht setzen und tauchen daher auch nicht auf. - Set-Cookie: Nach aktueller Spezifikation erscheint
set-cookieeinmal pro Wert, kann also mehrfach vorkommen. Zum Auslesen der Werte eignet sichgetSetCookie(). Im Browser sindSet-Cookie-Header einer Antwort ohnehin nicht zugänglich. - Der Iterator ist einmalig verwendbar. Brauchst du die Namen öfter, wandle sie mit
[...headers.keys()]in ein Array um. - Die Methode wird in allen modernen Browsern unterstützt, nicht aber im Internet Explorer. In Node.js steht
Headersab Version 18 global zur Verfügung.