Signatur
Beschreibung
Die Eigenschaft redirect eines Request-Objekts gibt den Weiterleitungsmodus als Zeichenkette zurück. Sie legt fest, was passiert, wenn der Server mit einem Umleitungsstatus (301, 302, 303, 307, 308) antwortet. Gesetzt wird der Wert über die Option redirect im Konstruktor new Request() oder direkt bei fetch(). Danach lässt er sich nur noch lesen.
"follow"(Standard): Der Browser folgt Weiterleitungen automatisch, bis zu 20 Stück. Die endgültige Adresse steht inResponse.url, undResponse.redirectedist danntrue."error": Bei einer Weiterleitung wird das Promise vonfetch()mit einemTypeErrorabgelehnt, also wie bei einem Netzwerkfehler."manual": Der Browser folgt der Weiterleitung nicht. Stattdessen liefert er eine opaque-redirect-Antwort mittype === "opaqueredirect",status === 0und ohne lesbare Header. Der Service-Worker kann sie an die Seite weiterreichen, sodass der Browser die Navigation selbst durchführt.
Typische Anwendungsfälle sind Sicherheitsprüfungen, bei denen man sich nicht umleiten lassen will ("error"), und Service-Worker, die Navigationsanfragen korrekt weitergeben müssen. Außerdem hilft die Eigenschaft beim Protokollieren oder Klonen von Anfragen, wenn man den ursprünglichen Modus prüfen möchte.
Rückgabewert
"follow".Beispiele
Standardwert und explizit gesetzten Modus auslesen
const standard = new Request('https://example.com/api');
console.log(standard.redirect);
const strikt = new Request('https://example.com/api', { redirect: 'error' });
console.log(strikt.redirect);
Weiterleitungen als Fehler behandeln
const ladeStrikt = async (url) => {
const request = new Request(url, { redirect: 'error' });
try {
const response = await fetch(request);
return await response.json();
} catch (err) {
// TypeError, falls der Server umleitet (z. B. auf eine Login-Seite)
console.warn(`Anfrage (${request.redirect}) fehlgeschlagen:`, err.message);
return null;
}
};
ladeStrikt('https://example.com/api/profil');
Weiterleitung manuell erkennen
const pruefeWeiterleitung = async (url) => {
const response = await fetch(url, { redirect: 'manual' });
if (response.type === 'opaqueredirect') {
console.log('Server leitet um – Ziel ist nicht lesbar');
} else {
console.log('Keine Weiterleitung, Status:', response.status);
}
};
pruefeWeiterleitung('https://example.com/alt');
Service-Worker: Modus der eingehenden Anfrage prüfen
self.addEventListener('fetch', (event) => {
const { request } = event;
// Navigationsanfragen haben den Modus 'manual'
if (request.mode === 'navigate') {
console.log('Navigation, redirect =', request.redirect);
}
// Die Originalanfrage weitergeben, damit der Modus erhalten bleibt
event.respondWith(fetch(request));
});
// Wichtig · Fallstricke
- Schreibgeschützt:
request.redirect = 'error'bewirkt nichts und wirft im Strict Mode einenTypeError. Wer den Modus ändern will, erzeugt eine neue Anfrage, z. B. mitnew Request(alterRequest, { redirect: 'error' }). "manual"verrät nichts über das Ziel: Im Browser sindLocation-Header und Statuscode aus Sicherheitsgründen nicht zugänglich (statusist0). Das Ziel lässt sich so also nicht clientseitig auslesen. Anders in Node.js (undici): Dort bekommt man den echten 3xx-Status und dieLocation-Angabe.- Service-Worker: Eine
opaqueredirect-Antwort darf nur auf Navigationsanfragen mit dem Modus"manual"zurückgegeben werden, sonst schlägt die Anfrage fehl. Eine eingehende Navigationsanfrage sollte man deshalb nicht mit geändertem Modus neu aufbauen. - Bei
"follow"ist nach mehr als 20 Weiterleitungen Schluss, dann folgt ein Netzwerkfehler. Bei301/302/303kann ausPOSTeinGETwerden. - Unterstützt wird die Eigenschaft von Chrome, Edge, Firefox, Safari (ab 10.1) und Node.js 18+. Der Internet Explorer unterstützt sie nicht.