Start · Sprachen · JavaScript · Referenz · Response.url

Response.url

Eigenschaft

Schreibgeschützte Eigenschaft, die die endgültige URL der Antwort als String enthält – nach allen Weiterleitungen und ohne Fragment.

seit JavaScript Baseline: alle modernen Browser, Node.js 18+ Kategorie: webapi

Signatur

Response.url

Beschreibung

Die Eigenschaft Response.url liefert die URL, unter der die Antwort tatsächlich abgerufen wurde. Wenn beim fetch()-Aufruf Weiterleitungen (HTTP 301, 302, 303, 307, 308) passiert sind, steht hier die letzte URL der Weiterleitungskette und nicht die ursprünglich angefragte Adresse.

Nützlich ist das vor allem, um Weiterleitungen zu erkennen (etwa zusammen mit Response.redirected), um relative Links in einem geladenen Dokument korrekt aufzulösen oder um beim Protokollieren und Debuggen festzuhalten, woher eine Antwort wirklich kam.

Der Wert ist immer eine absolute, serialisierte URL ohne Fragment (also ohne den Teil ab #). Wurde ein Response-Objekt selbst mit new Response() erzeugt, ist url ein leerer String, weil es keine Netzwerkquelle gibt.

Rückgabewert

Typ
string
Beschreibung
Die endgültige URL der Antwort als absolute URL ohne Fragment, bzw. ein leerer String "", wenn die Antwort keine URL hat (z. B. bei new Response() oder undurchsichtigen Antworten).

Beispiele

Endgültige URL nach einer Weiterleitung ermitteln

const response = await fetch('https://httpbin.org/redirect-to?url=https://httpbin.org/get');

console.log(response.redirected); // wurde umgeleitet?
console.log(response.url);        // Ziel der Weiterleitung
true https://httpbin.org/get

Fragment wird entfernt

const response = await fetch('https://example.com/seite.html#abschnitt-2');
console.log(response.url);
https://example.com/seite.html

Relative Links eines geladenen HTML-Dokuments auflösen

const response = await fetch('/docs/start');
const html = await response.text();

const doc = new DOMParser().parseFromString(html, 'text/html');
const links = [...doc.querySelectorAll('a[href]')].map(
  (a) => new URL(a.getAttribute('href'), response.url).href
);

console.log(links);
["https://example.com/docs/einleitung", "https://example.com/docs/api", ...]

Selbst erzeugte Response hat keine URL

const response = new Response(JSON.stringify({ ok: true }), {
  headers: { 'Content-Type': 'application/json' }
});

console.log(JSON.stringify(response.url));
""

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie response.url = '...' wird im nicht-strikten Modus stillschweigend ignoriert. Im strikten Modus (z. B. in ES-Modulen) wirft sie einen TypeError.
  • Leerer String: Bei new Response(), Response.error() und undurchsichtigen Antworten (type === "opaque", etwa mit mode: 'no-cors') ist url leer. Bei redirect: 'manual' kommt eine opaqueredirect-Antwort zurück, deren url die ursprünglich angefragte URL ist, nicht das Ziel der Weiterleitung.
  • Kein Fragment: Der Teil ab # wird nie mitgeliefert. Wenn du ihn brauchst, musst du ihn dir aus der Anfrage-URL selbst merken.
  • Service Worker: Gibt ein Service Worker eine zwischengespeicherte oder selbst gebaute Antwort zurück, kann url von der Anfrage-URL abweichen oder leer sein.
  • Sicherheit: Verlasse dich bei Sicherheitsentscheidungen nicht blind auf die ursprüngliche Anfrage-URL. Wenn Weiterleitungen eine Rolle spielen, prüfe response.url (bzw. ihren origin).
  • Kompatibilität: Wird von allen modernen Browsern unterstützt, ebenso von Node.js ab Version 18 (natives fetch), Deno und Bun.