Start · Sprachen · JavaScript · Referenz · XMLHttpRequest.responseURL

XMLHttpRequest.responseURL

Eigenschaft

Schreibgeschützte Eigenschaft mit der endgültigen, serialisierten URL der Antwort, auch nach Weiterleitungen. Ist die URL null, ergibt sie einen leeren String.

seit JavaScript Baseline: alle modernen Browser (nicht im Internet Kategorie: webapi

Signatur

XMLHttpRequest.responseURL

Beschreibung

Die Eigenschaft responseURL eines XMLHttpRequest-Objekts enthält die URL, von der die Antwort tatsächlich stammt. Folgt der Browser serverseitigen Weiterleitungen (HTTP 301, 302, 303, 307, 308), steht hier die URL nach der letzten Weiterleitung und nicht die ursprünglich an open() übergebene Adresse.

Die URL wird serialisiert zurückgegeben, also absolut und normalisiert. Ein eventuell vorhandenes Fragment (#abschnitt) wird dabei immer entfernt. Solange noch keine Antwort vorliegt oder die URL null ist, zum Beispiel vor dem Senden oder nach einem Netzwerkfehler, liefert die Eigenschaft einen leeren String "".

Typische Anwendungsfälle sind:

  • Erkennen, ob eine Anfrage weitergeleitet wurde, etwa auf eine Login-Seite, weil die Sitzung abgelaufen ist.
  • Relative Links in geladenen HTML- oder Markdown-Inhalten richtig auflösen.
  • Protokollieren und Fehlersuche bei Weiterleitungsketten, z. B. von HTTP auf HTTPS oder beim Wechsel auf ein CDN.

Sinnvoll auslesen lässt sich der Wert ab readyState 2 (HEADERS_RECEIVED), spätestens im load-Ereignis.

Rückgabewert

Typ
string
Beschreibung
Die absolute, serialisierte URL der Antwort ohne Fragment. Ist die Antwort-URL null, ergibt sich ein leerer String "".

Beispiele

Endgültige URL nach einer Weiterleitung auslesen

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://httpbin.org/redirect-to?url=/get');

xhr.addEventListener('load', () => {
  console.log('Status:', xhr.status);
  console.log('Antwort-URL:', xhr.responseURL);
});

xhr.send();
Status: 200 Antwort-URL: https://httpbin.org/get

Abgelaufene Sitzung erkennen (Weiterleitung auf die Login-Seite)

const loadDashboardData = () => new Promise((resolve, reject) => {
  const xhr = new XMLHttpRequest();
  xhr.open('GET', '/api/dashboard');
  xhr.responseType = 'json';

  xhr.onload = () => {
    const finalPath = new URL(xhr.responseURL).pathname;
    if (finalPath.startsWith('/login')) {
      reject(new Error('Sitzung abgelaufen – bitte neu anmelden'));
      return;
    }
    resolve(xhr.response);
  };
  xhr.onerror = () => reject(new Error('Netzwerkfehler'));
  xhr.send();
});

try {
  const data = await loadDashboardData();
  console.log(data);
} catch (err) {
  console.warn(err.message);
  window.location.href = '/login';
}
Sitzung abgelaufen – bitte neu anmelden

Relative Links im geladenen HTML auflösen

const xhr = new XMLHttpRequest();
xhr.open('GET', '/docs/latest');
xhr.responseType = 'document';

xhr.onload = () => {
  // Basis ist die tatsächliche URL, z. B. /docs/v3.2/ nach einer Weiterleitung
  const base = xhr.responseURL;
  const links = [...xhr.response.querySelectorAll('a[href]')]
    .map((a) => new URL(a.getAttribute('href'), base).href);
  console.log(links.slice(0, 2));
};

xhr.send();
["https://example.com/docs/v3.2/intro.html", "https://example.com/docs/v3.2/api.html"]

Wert vor dem Senden und nach einem Fehler

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://ungueltige-domain.invalid/daten#teil');
console.log(JSON.stringify(xhr.responseURL)); // noch keine Antwort

xhr.onerror = () => {
  console.log(JSON.stringify(xhr.responseURL)); // Netzwerkfehler
};
xhr.send();
"" ""

// Wichtig · Fallstricke

  • Fragment wird entfernt: Ein #hash aus der angefragten URL erscheint nie in responseURL.
  • Leerer String statt null: Vor dem Empfang der Header, bei abort() und bei Netzwerk- oder CORS-Fehlern ist der Wert "". Deshalb vor new URL(xhr.responseURL) prüfen, ob der String leer ist, sonst wirft der Konstruktor einen TypeError.
  • Weiterleitungen sind nicht einzeln sichtbar: Nur die letzte URL ist verfügbar, Zwischenschritte und der Weiterleitungsstatus (z. B. 302) lassen sich nicht auslesen. Weiterleitungen, die der Server mit Meta-Refresh oder JavaScript auslöst, werden nicht erfasst.
  • CORS: Bei ursprungsübergreifenden Weiterleitungen muss jedes Ziel CORS korrekt erlauben. Sonst schlägt die Anfrage fehl und responseURL bleibt leer.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome 37+, Firefox 32+, Safari 8+, Edge), aber nicht vom Internet Explorer. Dort ist die Eigenschaft undefined. In neuem Code ist oft fetch() mit Response.url und Response.redirected die bessere Wahl.