Signatur
Beschreibung
Die Methode delete() des Headers-Interfaces entfernt einen Header aus dem aktuellen Headers-Objekt. Hatte der Header mehrere Werte, zum Beispiel nach mehreren Aufrufen von append(), werden alle auf einmal gelöscht. Existiert der Header nicht, passiert nichts und es wird auch kein Fehler ausgelöst.
Man braucht delete() vor allem dann, wenn man Header für eine fetch()-Anfrage aufbaut oder umbaut. Typische Fälle: Einen Authorization-Header entfernen, bevor eine Anfrage an einen fremden Server geht, oder den Content-Type bei FormData-Bodys weglassen, damit der Browser die richtige Multipart-Boundary selbst einträgt.
Header-Namen werden ohne Rücksicht auf Groß- und Kleinschreibung verglichen: delete("content-type") entfernt also auch Content-Type. Ist der Name kein gültiger HTTP-Header-Name, wirft die Methode einen TypeError.
Jedes Headers-Objekt hat einen Guard, der festlegt, was verändert werden darf. Bei immutable-Headern (z. B. response.headers einer fetch()-Antwort) wirft delete() einen TypeError. Bei verbotenen Request-Headern wie Host oder Cookie wird der Aufruf im Browser dagegen stillschweigend ignoriert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Name des HTTP-Headers, der entfernt werden soll, z. B. "Content-Type". Groß- und Kleinschreibung werden ignoriert. |
Beispiele
Header anlegen und wieder entfernen
const headers = new Headers({
'Content-Type': 'application/json',
'X-Debug': '1'
});
headers.delete('x-debug'); // Groß-/Kleinschreibung egal
console.log(headers.has('X-Debug'));
console.log([...headers.keys()]);
Mehrfach angehängte Werte auf einmal löschen
const headers = new Headers();
headers.append('Accept', 'text/html');
headers.append('Accept', 'application/json');
console.log(headers.get('Accept'));
headers.delete('Accept');
console.log(headers.get('Accept'));
Content-Type für FormData-Upload entfernen
const buildHeaders = (token) => {
const headers = new Headers({
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
});
return headers;
};
const uploadFile = async (file, token) => {
const headers = buildHeaders(token);
// Der Browser setzt bei FormData selbst multipart/form-data inkl. Boundary
headers.delete('Content-Type');
const body = new FormData();
body.append('datei', file);
const response = await fetch('/api/upload', { method: 'POST', headers, body });
return response.ok;
};
Fehler bei unveränderlichen Antwort-Headern
const response = new Response('ok', { headers: { 'X-Test': 'a' } });
// Response.error() liefert Header mit Guard "immutable"
const errorResponse = Response.error();
try {
errorResponse.headers.delete('X-Test');
} catch (err) {
console.log(err.name);
}
// Kopie anlegen, wenn man Antwort-Header ändern will
const copy = new Headers(response.headers);
copy.delete('X-Test');
console.log(copy.has('X-Test'));
// Wichtig · Fallstricke
- Immutable-Guard: Bei
response.headersausfetch()und beiResponse.error()wirftdelete()einenTypeError. Wer Header ändern will, legt erst mitnew Headers(response.headers)eine Kopie an. - Verbotene Header: Im Browser werden Aufrufe für verbotene Request-Header (z. B.
Cookie,Host,Content-Length) ohne Fehlermeldung ignoriert. Beino-cors-Anfragen sind außerdem nur CORS-sichere Header erlaubt. - Ungültige Namen wie
"Mein Header"(mit Leerzeichen) lösen einenTypeErroraus. Set-Cookielässt sich zwar löschen, in Browsern ist er in Antworten aber ohnehin nicht sichtbar.- Kompatibilität: In allen modernen Browsern, in Web Workern, in Node.js ab 18 (globales
fetch) sowie in Deno und Bun verfügbar.