Signatur
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
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();
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;
});
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');
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);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
urlwird im Sloppy-Modus stillschweigend ignoriert und löst im Strict-Modus (z. B. in ES-Modulen) einenTypeErroraus. - 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
urlunverändert auf der ursprünglichen Adresse. - Sicherheit: Enthält die URL Tokens als Query-Parameter (häufig, weil
EventSourcekeine eigenen Header erlaubt), taucht das Token beim Protokollieren vonurlim Klartext auf. Logs entsprechend filtern oder Cookies mitwithCredentialsverwenden. - Ungültige URLs: Lässt sich die URL nicht parsen, wirft bereits der Konstruktor einen
SyntaxError-DOMException– eineEventSourcemit ungültigerurlkann es also nicht geben. - Kompatibilität: In allen modernen Browsern und in Web Workern verfügbar; der Internet Explorer unterstützt
EventSourcenicht. In Node.js istEventSourceerst in neueren Versionen (experimentell ab 22) global vorhanden.