2012-12-27 6 views
6

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?

+0

@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

Antwort

4

Die Chancen stehen hoch, dies ist ein Problem der Cross-Origin-Ressourcenfreigabe, die Sie in den relevanten Domänen aktivieren müssen.

http://enable-cors.org/

Als MDN sagt:

Note: Although it's not yet part of the standard, EventSource supports CORS in Firefox 11 and later. This is expected to become standard soon.

+0

Es funktioniert nicht. 'Access-Control-Allow-Origin: d2.example.com' wird nun im Antwortheader angezeigt. Doch 'EventSource (" http://d2.example.com/subscribe ")' erzeugt immer noch den gleichen Fehler. Ich verwende Chrome – wael34218

+0

Es funktioniert auf Firefox, aber nicht auf Chrome – wael34218

+4

1) CORS + EventSource ist jetzt ein Teil des Standart; 2) CORS + EventSource wird in FF 11+, Opera 12+ und in Chrome 25 unterstützt; 3) Sie verwenden Polyfill mit CORS-Unterstützung für EventSource – 4esn0k

Verwandte Themen