Start · Sprachen · JavaScript · Referenz · Headers.keys()

Headers.keys()

Methode

Gibt einen Iterator über alle Header-Namen eines <code>Headers</code>-Objekts zurück. Die Namen sind kleingeschrieben und alphabetisch sortiert.

seit JavaScript Baseline: alle modernen Browser (seit 2017), Node. Kategorie: webapi

Signatur

Headers.prototype.keys()

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

Typ
Iterator<string>
Beschreibung
Ein Iterator (Headers Iterator), der alle Header-Namen als kleingeschriebene Zeichenketten in sortierter Reihenfolge liefert.

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);
}
accept content-type x-request-id

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');
3 Header empfangen: cache-control, content-length, content-type

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'));
[ 'accept-language' ] de, en

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);
[ 'x-client', 'x-trace' ]

// 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, etwa content-type oder cache-control. Andere Header sind nur sichtbar, wenn der Server sie über Access-Control-Expose-Headers freigibt. Bei opaque-Antworten (mode: 'no-cors') ist der Iterator leer.
  • Verbotene Header: Bestimmte Header, zum Beispiel Cookie in Anfragen, lassen sich im Browser nicht setzen und tauchen daher auch nicht auf.
  • Set-Cookie: Nach aktueller Spezifikation erscheint set-cookie einmal pro Wert, kann also mehrfach vorkommen. Zum Auslesen der Werte eignet sich getSetCookie(). Im Browser sind Set-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 Headers ab Version 18 global zur Verfügung.