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

Headers.delete()

Methode

Entfernt einen Header samt aller seiner Werte aus einem <code>Headers</code>-Objekt. Groß- und Kleinschreibung spielen beim Namen keine Rolle.

seit JavaScript Baseline: alle modernen Browser, Node.js 18+ Kategorie: webapi

Signatur

Headers.prototype.delete(name)

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()]);
false [ 'content-type' ]

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'));
text/html, application/json null

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'));
TypeError false

// Wichtig · Fallstricke

  • Immutable-Guard: Bei response.headers aus fetch() und bei Response.error() wirft delete() einen TypeError. Wer Header ändern will, legt erst mit new 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. Bei no-cors-Anfragen sind außerdem nur CORS-sichere Header erlaubt.
  • Ungültige Namen wie "Mein Header" (mit Leerzeichen) lösen einen TypeError aus.
  • Set-Cookie lä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.