2012-12-27 16 views
6

Sto provando a connettere i browser con un server che fornisce Server Sent Events (SSE). Questo server ha un dominio diverso da quello originale. Ad esempio se chiami http://d1.example.com/page questa pagina proverà a connettersi a un canale SSE su http://d2.example.com/subscribe. Cercando di fare che chiederà il seguente errore:Errore SSE Uncaught: SECURITY_ERR: DOM Exception 18 con un server che fornisce Server Sent Events (SSE)

Uncaught Error: SECURITY_ERR: DOM Exception 18

sulla linea:

var source = new EventSource("http://d2.example.com/subscribe")

Come posso rimediare?

Update (Soluzioni che ho provato fuori):

1- CORS

ho provato CORS aggiungendo Access-Control-Allow-Origin:* alle intestazioni del mio servizio web d2.example.com. Non ha risolto il problema EventSource, anche se le chiamate $.get("http://d2.example.com") da d1.example.com funzionano correttamente! Pensavo che SSE funzionasse su normali richieste HTTP, quindi perché non funziona su Chrome?

2- Redirect

sto utilizzando server di httpd, così ho creato una regola di reindirizzamento in d1.example.com host virtuale che passa le richieste SSE a d2.example.com. Ha funzionato perfettamente con Firefox. Chrome, d'altra parte, non ha richiesto alcun errore e non si è nemmeno connesso al server SSE. Sembra che abbia scaricato l'intero comando EventSource. Sembra che questa soluzione non funzionerà mai, così lascia andare avanti ...

3- Reverse Proxy

Entrambi i browser collegati su d1.example.com/subscribe che è fondamentalmente connettono a d2.example.com attraverso proxy inverso. Ma l'evento on_close non viene mai rilevato, anche se il browser è chiuso. Il che ha senso dal momento che il server d2 sta creando il canale con il server proxy. Come posso inoltrare l'evento on_close dal server proxy a d2?

Esistono modi diversi per eseguire questa operazione?

+0

@Jack Non è la stessa domanda. Questa domanda non richiede un file. Un file è abbastanza semplice da poter creare una regola di reindirizzamento come scenario peggiore o proxy inverso. SSE non funzionerà con queste soluzioni. – wael34218

risposta

4

Le probabilità sono elevate. Si tratta di un problema di condivisione delle risorse tra origini, che è necessario abilitare nei domini pertinenti.

http://enable-cors.org/

Come il MDN dice:

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

Non funziona. 'Access-Control-Allow-Origin: d2.example.com' viene visualizzato nell'intestazione della risposta. Tuttavia 'EventSource (" http://d2.example.com/subscribe ")' produce ancora lo stesso errore. Sto usando Chrome – wael34218

+0

Sta funzionando su Firefox ma non su Chrome – wael34218

+4

1) CORS + EventSource è una parte di standart ora; 2) CORS + EventSource è supportato in FF 11+, Opera 12+ e sarà in Chrome 25; 3) si utilizza polyfill con il supporto CORS per EventSource – 4esn0k

Problemi correlati