Signatur
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
"", 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
Fragment wird entfernt
const response = await fetch('https://example.com/seite.html#abschnitt-2');
console.log(response.url);
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);
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 einenTypeError. - Leerer String: Bei
new Response(),Response.error()und undurchsichtigen Antworten (type === "opaque", etwa mitmode: 'no-cors') isturlleer. Beiredirect: 'manual'kommt eineopaqueredirect-Antwort zurück, derenurldie 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
urlvon 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. ihrenorigin). - Kompatibilität: Wird von allen modernen Browsern unterstützt, ebenso von Node.js ab Version 18 (natives
fetch), Deno und Bun.