Start · Sprachen · JavaScript · Referenz · EventSource.url

EventSource.url

Eigenschaft

Die schreibgeschützte Eigenschaft <code>url</code> gibt die vollständig aufgelöste URL der Server-Sent-Events-Quelle einer <code>EventSource</code> als String zurück.

seit JavaScript Baseline: alle modernen Browser (seit Jahren, Web Kategorie: webapi

Signatur

EventSource.url

Beschreibung

Die Eigenschaft EventSource.url enthält die URL, mit der die EventSource erzeugt wurde. Dabei handelt es sich nicht um den Original-String aus dem Konstruktor, sondern um die absolute, aufgelöste URL: Relative Pfade wie "/events" werden gegen die Basis-URL des Dokuments (bzw. des Workers) aufgelöst, sodass etwa "https://example.com/events" herauskommt.

Nützlich ist url vor allem beim Protokollieren und Debuggen, wenn mehrere Event-Streams parallel laufen, oder wenn eine Verbindung nach einem Fehler manuell neu aufgebaut werden soll – die URL lässt sich dann direkt an einen neuen EventSource-Konstruktor übergeben.

Die Eigenschaft ist schreibgeschützt. Ein Wechsel der Quelle ist nur möglich, indem man die bestehende Verbindung mit close() schließt und eine neue EventSource erzeugt. Weiterleitungen (HTTP 3xx) des Servers ändern den Wert von url nicht.

Rückgabewert

Typ
string
Beschreibung
Die absolute, serialisierte URL der Ereignisquelle, wie sie beim Erzeugen der EventSource aufgelöst wurde.

Beispiele

Aufgelöste URL auslesen

// Angenommen, die Seite läuft unter https://example.com/app/
const source = new EventSource('/api/stream?channel=news');

console.log(source.url);

source.close();
https://example.com/api/stream?channel=news

Mehrere Streams beim Logging unterscheiden

const channels = ['news', 'sport', 'wetter'];

const sources = channels.map((ch) => {
  const es = new EventSource(`/api/stream?channel=${encodeURIComponent(ch)}`);

  es.addEventListener('message', (event) => {
    console.log(`[${es.url}]`, event.data);
  });

  es.addEventListener('error', () => {
    console.warn(`Verbindungsproblem bei ${es.url}, readyState=${es.readyState}`);
  });

  return es;
});
[https://example.com/api/stream?channel=news] Neue Schlagzeile ...

Manueller Neuaufbau nach endgültigem Abbruch

const connect = (url, withCredentials = false) => {
  const es = new EventSource(url, { withCredentials });

  es.onmessage = (event) => console.log('Daten:', event.data);

  es.onerror = () => {
    // CLOSED = 2: Browser versucht keinen automatischen Reconnect mehr
    if (es.readyState === EventSource.CLOSED) {
      console.log(`Neuer Versuch in 5 s für ${es.url}`);
      setTimeout(() => connect(es.url, es.withCredentials), 5000);
    }
  };

  return es;
};

connect('/api/live');
Neuer Versuch in 5 s für https://example.com/api/live

Schreibversuch hat keine Wirkung

const es = new EventSource('/api/stream');

es.url = 'https://andere-domain.example/stream'; // wird ignoriert
console.log(es.url);

// Quelle wechseln: schließen und neu erzeugen
es.close();
const neu = new EventSource('/api/stream-v2');
console.log(neu.url);
https://example.com/api/stream https://example.com/api/stream-v2

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an url wird im Sloppy-Modus stillschweigend ignoriert und löst im Strict-Modus (z. B. in ES-Modulen) einen TypeError aus.
  • Immer absolut: Der Wert entspricht nicht zwingend dem an den Konstruktor übergebenen String – relative Pfade werden aufgelöst, und die URL wird normalisiert (z. B. Kodierung von Sonderzeichen). Vergleiche mit dem Original-String können deshalb fehlschlagen; besser mit new URL(...) normalisieren.
  • Weiterleitungen: Folgt der Browser einem Redirect, bleibt url unverändert auf der ursprünglichen Adresse.
  • Sicherheit: Enthält die URL Tokens als Query-Parameter (häufig, weil EventSource keine eigenen Header erlaubt), taucht das Token beim Protokollieren von url im Klartext auf. Logs entsprechend filtern oder Cookies mit withCredentials verwenden.
  • Ungültige URLs: Lässt sich die URL nicht parsen, wirft bereits der Konstruktor einen SyntaxError-DOMException – eine EventSource mit ungültiger url kann es also nicht geben.
  • Kompatibilität: In allen modernen Browsern und in Web Workern verfügbar; der Internet Explorer unterstützt EventSource nicht. In Node.js ist EventSource erst in neueren Versionen (experimentell ab 22) global vorhanden.