Ich versuche Browser mit einem Server verbinden, der Server Sent Events (SSE) bereitstellt. Dieser Server hat eine andere Domäne als die ursprüngliche. Wenn Sie beispielsweise http://d1.example.com/page
anrufen, versucht diese Seite, eine Verbindung zu einem SSE-Kanal unter http://d2.example.com/subscribe
herzustellen. das wird aufgefordert, die folgenden Fehler zu tun versuchen:SSE Uncaught Fehler: SECURITY_ERR: DOM Ausnahme 18 mit einem Server, der Server Sent Events (SSE) bereitstellt
Uncaught Error: SECURITY_ERR: DOM Exception 18
auf der Linie:
var source = new EventSource("http://d2.example.com/subscribe")
Wie kann ich das Problem lösen?
Update (Lösungen, die ich ausprobiert habe):
1- CORS
versuchte ich CORS von Access-Control-Allow-Origin:*
den Header meiner Web-Service d2.example.com
hinzufügen. Es löste nicht EventSource
Problem, obwohl $.get("http://d2.example.com")
Anrufe von d1.example.com
Seiten funktionieren jetzt gut! Ich dachte, SSE funktioniert mit normalen HTTP-Anfragen. Warum funktioniert es nicht in Chrome?
2- Redirect
ich httpd-Server verwenden, so dass ich erstellt in d1.example.com
virtueller Host eine Umleitung Regel, die SSE-Anfragen an d2.example.com
gibt. Es funktionierte perfekt mit Firefox. Auf der anderen Seite hat Chrome keinen Fehler gemeldet und auch keine Verbindung zum SSE-Server hergestellt. Es sieht so aus, als hätte es den ganzen EventSource
Befehl verloren. Es sieht aus wie diese Lösung wird nie funktionieren, kann so weitermachen ...
3- Reverse-Proxy-
beiden Browser auf d1.example.com/subscribe
verbunden, die im Wesentlichen auf d2.example.com
durch Reverse-Proxy eine Verbindung herstellt. Aber on_close
Ereignis wird nie abgefangen, auch wenn der Browser geschlossen ist. Was sinnvoll ist, da der d2-Server nun den Kanal mit dem Proxy-Server erstellt. Wie kann ich das Ereignis vom Proxy-Server an d2 weiterleiten?
Gibt es verschiedene Möglichkeiten, wie dies funktioniert?
@Jack Es ist nicht die gleiche Frage. Diese Frage erfordert keine Datei. Eine Datei ist ziemlich einfach, Sie könnten eine Umleitungsregel als Worst-Case-Szenario oder als Reverse-Proxy erstellen. SSE wird von diesen Lösungen nicht funktionieren. – wael34218