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

Headers.has()

Methode

Prüft, ob ein <code>Headers</code>-Objekt einen Header mit dem angegebenen Namen enthält, und gibt <code>true</code> oder <code>false</code> zurück.

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

Signatur

Headers.prototype.has(name)

Beschreibung

Die Methode has() des Headers-Interfaces aus der Fetch-API prüft, ob ein bestimmter HTTP-Header in einem Headers-Objekt vorhanden ist. Das Ergebnis ist immer ein boolescher Wert. Der Wert des Headers wird dabei nicht gelesen, geprüft wird nur, ob es ihn gibt.

Header-Namen werden ohne Beachtung der Groß-/Kleinschreibung verglichen: has("Content-Type") und has("content-type") liefern dasselbe Ergebnis. Ein Header mit leerem Wert ("") zählt als vorhanden.

Typische Einsatzfälle sind: vor dem Setzen eines Standard-Headers prüfen, ob schon ein eigener Wert gesetzt wurde (zum Beispiel Authorization oder Content-Type), bei einer Response prüfen, ob Caching- oder Paginierungs-Header mitgeschickt wurden, und in Service Workern oder Middleware zwischen verschiedenen Antworten unterscheiden.

Anders als get(), das bei einem fehlenden Header null zurückgibt, beantwortet has() nur die Frage nach dem Vorhandensein. Das macht die Absicht im Code klarer.

Parameter

Name Typ Default Beschreibung
$name Pflicht string Name des gesuchten HTTP-Headers. Groß-/Kleinschreibung spielt keine Rolle. Ist der Name kein gültiger HTTP-Header-Name, wird ein TypeError ausgelöst.

Beispiele

Grundlegende Prüfung ohne Beachtung der Groß-/Kleinschreibung

const headers = new Headers({
  'Content-Type': 'application/json',
  'X-Leer': ''
});

console.log(headers.has('Content-Type'));
console.log(headers.has('content-type')); // Groß-/Kleinschreibung egal
console.log(headers.has('X-Leer'));       // leerer Wert zählt als vorhanden
console.log(headers.has('Authorization'));
true true true false

Standard-Header nur setzen, wenn keiner vorhanden ist

const apiFetch = (url, options = {}) => {
  const headers = new Headers(options.headers);

  if (!headers.has('Accept')) {
    headers.set('Accept', 'application/json');
  }
  if (options.body && !headers.has('Content-Type')) {
    headers.set('Content-Type', 'application/json');
  }

  return fetch(url, { ...options, headers });
};

// Ein eigener Content-Type bleibt erhalten
await apiFetch('/api/upload', {
  method: 'POST',
  body: 'a,b,c',
  headers: { 'Content-Type': 'text/csv' }
});

Antwort-Header einer Response auswerten

const response = await fetch('https://api.github.com/repos/nodejs/node/issues');

if (response.headers.has('Link')) {
  console.log('Paginierung vorhanden:', response.headers.get('Link'));
} else {
  console.log('Nur eine Seite mit Ergebnissen');
}
Paginierung vorhanden: <https://api.github.com/...page=2>; rel="next", ...

Ungültiger Header-Name löst einen Fehler aus

const headers = new Headers();

try {
  headers.has('Ungültig Name'); // Leerzeichen sind in Header-Namen nicht erlaubt
} catch (err) {
  console.log(err.name);
}
TypeError

// Wichtig · Fallstricke

  • CORS-Einschränkung: Bei Cross-Origin-Antworten sind nur CORS-sichere Antwort-Header lesbar (z. B. Content-Type, Cache-Control) sowie die Header, die der Server über Access-Control-Expose-Headers freigibt. Für alle anderen liefert has() false, auch wenn der Server sie mitgeschickt hat.
  • Verbotene Header: Set-Cookie ist im Browser nie lesbar, has('Set-Cookie') ergibt dort also immer false. Bei Request-Objekten werden verbotene Anfrage-Header wie Host oder Cookie beim Setzen stillschweigend ignoriert, deshalb meldet has() sie als nicht vorhanden. Node.js hat diese Einschränkungen nicht.
  • Ungültige Namen: Namen mit Leerzeichen oder anderen unzulässigen Zeichen lösen einen TypeError aus. Es wird nicht einfach false zurückgegeben.
  • Opaque Responses: Bei Antworten mit mode: 'no-cors' ist das Headers-Objekt leer, und has() liefert immer false.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt, in Node.js ab Version 18 global verfügbar. Internet Explorer unterstützt die Methode nicht.