Start · Sprachen · JavaScript · Referenz · Request.redirect

Request.redirect

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, wie ein <code>Request</code> mit HTTP-Weiterleitungen umgeht: <code>"follow"</code>, <code>"error"</code> oder <code>"manual"</code>.

seit JavaScript Baseline: alle modernen Browser (seit 2017), Node. Kategorie: webapi

Signatur

Request.redirect

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 in Response.url, und Response.redirected ist dann true.
  • "error": Bei einer Weiterleitung wird das Promise von fetch() mit einem TypeError abgelehnt, also wie bei einem Netzwerkfehler.
  • "manual": Der Browser folgt der Weiterleitung nicht. Stattdessen liefert er eine opaque-redirect-Antwort mit type === "opaqueredirect", status === 0 und 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

Typ
"follow" | "error" | "manual"
Beschreibung
Der Weiterleitungsmodus der Anfrage als Zeichenkette. Ohne Angabe im Konstruktor ist der Wert "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);
follow error

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');
Anfrage (error) fehlgeschlagen: Failed to fetch // nur bei Weiterleitung

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');
Server leitet um – Ziel ist nicht lesbar

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));
});
Navigation, redirect = manual

// Wichtig · Fallstricke

  • Schreibgeschützt: request.redirect = 'error' bewirkt nichts und wirft im Strict Mode einen TypeError. Wer den Modus ändern will, erzeugt eine neue Anfrage, z. B. mit new Request(alterRequest, { redirect: 'error' }).
  • "manual" verrät nichts über das Ziel: Im Browser sind Location-Header und Statuscode aus Sicherheitsgründen nicht zugänglich (status ist 0). Das Ziel lässt sich so also nicht clientseitig auslesen. Anders in Node.js (undici): Dort bekommt man den echten 3xx-Status und die Location-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. Bei 301/302/303 kann aus POST ein GET werden.
  • Unterstützt wird die Eigenschaft von Chrome, Edge, Firefox, Safari (ab 10.1) und Node.js 18+. Der Internet Explorer unterstützt sie nicht.