Signatur
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'));
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');
}
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);
}
// 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 überAccess-Control-Expose-Headersfreigibt. Für alle anderen lieferthas()false, auch wenn der Server sie mitgeschickt hat. - Verbotene Header:
Set-Cookieist im Browser nie lesbar,has('Set-Cookie')ergibt dort also immerfalse. BeiRequest-Objekten werden verbotene Anfrage-Header wieHostoderCookiebeim Setzen stillschweigend ignoriert, deshalb meldethas()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
TypeErroraus. Es wird nicht einfachfalsezurückgegeben. - Opaque Responses: Bei Antworten mit
mode: 'no-cors'ist dasHeaders-Objekt leer, undhas()liefert immerfalse. - 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.