Start · Sprachen · JavaScript · Referenz · Response.redirected

Response.redirected

Eigenschaft

Die schreibgeschützte Eigenschaft <code>redirected</code> gibt an, ob die <code>Response</code> das Ergebnis einer Anfrage ist, die mindestens einmal umgeleitet wurde.

seit JavaScript Baseline: alle modernen Browser (Chrome 57+, Firef Kategorie: webapi

Signatur

Response.redirected

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

Typ
boolean
Beschreibung
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');
Umgeleitet von https://httpbin.org/redirect/1 nach https://httpbin.org/get

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 Sie fetch(url, { redirect: "error" }). Dann wird das Promise abgelehnt, sobald eine Umleitung auftritt.
  • Nur die finale URL: Die Zwischenstationen einer Umleitungskette sind nicht abrufbar. response.url liefert nur das letzte Ziel.
  • redirect: "manual": Hier ist redirected false und type hat den Wert "opaqueredirect". Status und Header sind dann nicht lesbar.
  • Selbst erzeugte Antworten: Bei new Response() und Response.redirect() ist der Wert immer false. Ein Klon über clone() ü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 neue Response ohne 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.