Signatur
Beschreibung
Mit getSetCookie() liest du alle Set-Cookie-Header eines Headers-Objekts aus. Du bekommst ein Array von Strings, in dem jeder Header ein eigenes Element ist. Das ist nötig, weil Set-Cookie als einziger Header nicht sicher per Komma zusammengefügt werden kann: Cookie-Attribute wie Expires=Wed, 21 Oct 2026 07:28:00 GMT enthalten selbst Kommas.
Vor dieser Methode gab headers.get("set-cookie") alle Werte als einen durch ", " verbundenen String zurück. Diesen String konnte man nicht zuverlässig wieder aufteilen. getSetCookie() behebt das Problem und ist der empfohlene Weg, mehrere Cookies auszulesen.
Praktisch nützlich ist die Methode vor allem serverseitig: in Node.js, Deno, Bun, Cloudflare Workers oder in Proxys und Middleware (etwa Next.js, Remix), wenn Cookies einer Upstream-Antwort weitergereicht oder ausgewertet werden sollen. Im Browser ist Set-Cookie ein verbotener Antwort-Header (forbidden response header name). Bei Antworten von fetch() liefert die Methode dort deshalb immer ein leeres Array.
Rückgabewert
Set-Cookie-Header in der Reihenfolge, in der sie hinzugefügt wurden. Gibt es keinen solchen Header, ist das Array leer ([]) – es wird also nie null zurückgegeben.Beispiele
Mehrere Cookies sauber auslesen
const headers = new Headers();
headers.append("Set-Cookie", "session=abc123; Path=/; HttpOnly");
headers.append("Set-Cookie", "theme=dark; Expires=Wed, 21 Oct 2026 07:28:00 GMT");
// Alt: alles in einem String, Kommas sind nicht eindeutig
console.log(headers.get("set-cookie"));
// Neu: ein Array-Element pro Header
console.log(headers.getSetCookie());
Cookies einer Upstream-Antwort in Node.js auswerten
// Node.js 20+ (ES-Modul, Top-Level-await)
const res = await fetch("https://example.com/login", {
method: "POST",
body: new URLSearchParams({ user: "max", pass: "geheim" }),
});
const cookies = res.headers.getSetCookie();
// Name-Wert-Paare ohne Attribute herausziehen
const jar = Object.fromEntries(
cookies.map((c) => {
const [pair] = c.split(";");
const i = pair.indexOf("=");
return [pair.slice(0, i).trim(), pair.slice(i + 1).trim()];
})
);
console.log(jar);
Cookies in einem Proxy/Worker weiterreichen
// z. B. Cloudflare Worker oder Deno.serve-Handler
const handler = async (request) => {
const upstream = await fetch("https://api.example.com" + new URL(request.url).pathname);
const headers = new Headers({ "Content-Type": upstream.headers.get("Content-Type") ?? "text/plain" });
// Jeden Cookie einzeln übernehmen – nicht zu einem String zusammenfügen!
for (const cookie of upstream.headers.getSetCookie()) {
headers.append("Set-Cookie", cookie);
}
return new Response(upstream.body, { status: upstream.status, headers });
};
export default { fetch: handler };
Browser: leeres Array bei fetch-Antworten
const res = await fetch("/api/login", { method: "POST" });
// Set-Cookie ist im Browser für Skripte unsichtbar
console.log(res.headers.getSetCookie());
// Wichtig · Fallstricke
- Im Browser meist nutzlos:
Set-CookieundSet-Cookie2sind verbotene Antwort-Header. Beifetch()- und XHR-Antworten ist das Ergebnis immer[], auch mitcredentials: "include". Cookies setzt der Browser trotzdem selbst. Aus Skripten sind sie nur überdocument.cookieoder die Cookie Store API lesbar, und das nur ohneHttpOnly. - Nicht selbst aufteilen: Den String aus
get("set-cookie")niemals persplit(",")zerlegen.Expires-Datumsangaben enthalten Kommas. - Iteration: Beim Durchlaufen mit
for...ofoderentries()erscheint jederSet-Cookie-Header als eigenes Paar. Andere doppelte Header werden dagegen zusammengefasst. - Keine Parameter: Die Methode liefert nur rohe Header-Strings. Name, Wert und Attribute (
Path,Secure,SameSite…) musst du selbst auslesen oder eine Bibliothek wiecookiebzw.set-cookie-parserverwenden. - Kompatibilität: Verfügbar ab Chrome/Edge 113, Firefox 112, Safari 17, Node.js 19.7 (zurückportiert nach 18.14), Deno 1.34 und Bun. Für ältere Umgebungen ist eine Prüfung sinnvoll:
typeof headers.getSetCookie === "function". Andernfalls greift man in Node aufres.headers.raw()(node-fetch) oderIncomingMessage.headers["set-cookie"]zurück. - Sicherheit: Wenn ein Proxy Cookies weiterreicht, sollte er die Attribute
DomainundSecureprüfen. Sonst können Cookies für falsche Domains oder über unverschlüsselte Verbindungen gesetzt werden.