Signatur
Beschreibung
Die Eigenschaft Response.redirected ist ein schreibgeschützter Wahrheitswert. Er ist true, wenn fetch() beim Abrufen einer Ressource mindestens einer HTTP-Umleitung (z. B. 301, 302, 303, 307, 308) gefolgt ist. Die Antwort, die Sie erhalten, stammt dann von einer anderen URL als der ursprünglich angefragten. Diese finale URL steht in Response.url.
Nützlich ist das zum Beispiel, wenn Sie erkennen wollen, dass eine geschützte API-Anfrage auf eine Login-Seite umgeleitet wurde (abgelaufene Sitzung), um veraltete Links in Ihrer Anwendung zu finden oder um Umleitungen zu protokollieren. Auch in Service Workern ist die Eigenschaft wichtig: Browser lehnen umgeleitete Antworten für Navigationsanfragen ab, wenn der Redirect-Modus der Anfrage nicht "follow" ist.
Die Eigenschaft ist nur dann true, wenn fetch() die Umleitung selbst verfolgt hat (Standard: redirect: "follow"). Mit redirect: "manual" bekommen Sie stattdessen eine undurchsichtige Antwort (type === "opaqueredirect"). Mit redirect: "error" wird das Promise bei einer Umleitung abgelehnt.
Rückgabewert
true, wenn die Antwort nach mindestens einer Umleitung zustande kam, sonst false. Bei Antworten, die mit new Response() erzeugt wurden, ist der Wert immer false.Beispiele
Umleitung erkennen und Ziel-URL ausgeben
const pruefeUmleitung = async (url) => {
const response = await fetch(url);
if (response.redirected) {
console.log(`Umgeleitet von ${url} nach ${response.url}`);
} else {
console.log('Keine Umleitung');
}
};
pruefeUmleitung('https://httpbin.org/redirect/1');
Abgelaufene Sitzung erkennen (Umleitung zur Login-Seite)
const ladeDaten = async () => {
const response = await fetch('/api/profil', { credentials: 'same-origin' });
// Server leitet nicht angemeldete Nutzer auf /login um
if (response.redirected && new URL(response.url).pathname === '/login') {
window.location.href = response.url;
return null;
}
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
};
ladeDaten().then((profil) => profil && console.log(profil.name));
Service Worker: umgeleitete Antwort für Navigationen bereinigen
// Manche Browser verweigern umgeleitete Antworten aus dem Cache bei Navigationen.
const bereinige = async (response) => {
if (!response.redirected) return response;
const body = await response.blob();
return new Response(body, {
headers: response.headers,
status: response.status,
statusText: response.statusText
});
};
self.addEventListener('fetch', (event) => {
if (event.request.mode !== 'navigate') return;
event.respondWith(
caches.match(event.request)
.then((cached) => cached ?? fetch(event.request))
.then(bereinige)
);
});
// Wichtig · Fallstricke
- Kein Sicherheitsmerkmal: Verlassen Sie sich nicht allein auf
redirected, um Umleitungen zu verhindern. Wollen Sie Umleitungen gar nicht zulassen, verwenden Siefetch(url, { redirect: "error" }). Dann wird das Promise abgelehnt, sobald eine Umleitung auftritt. - Nur die finale URL: Die Zwischenstationen einer Umleitungskette sind nicht abrufbar.
response.urlliefert nur das letzte Ziel. redirect: "manual": Hier istredirectedfalseundtypehat den Wert"opaqueredirect". Status und Header sind dann nicht lesbar.- Selbst erzeugte Antworten: Bei
new Response()undResponse.redirect()ist der Wert immerfalse. Ein Klon überclone()übernimmt den Wert. - Service Worker: Wird eine umgeleitete Antwort bei einer Navigationsanfrage mit einem anderen Redirect-Modus als
"follow"zurückgegeben, schlägt die Navigation fehl. Deshalb eine neueResponseohne Umleitungsmerkmal erzeugen. - Kompatibilität: Wird von allen modernen Browsern unterstützt, in Node.js ab Version 18 über das eingebaute
fetch. Im Internet Explorer gibt es die Eigenschaft nicht.