2012-04-26 22 views
5

Estoy intentando conectar con un WebSocket en server.domain.com de trial.domain.comconexión entre dominios de WebSocket causando una NS_ERROR_DOM_SECURITY_ERR

NS_ERROR_DOM_SECURITY_ERR en Firefox:

"[Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "https://trial.domain.com/home Line: 454"]" 

cuando estoy tratando de hacer una conexión WebSocket:

try { 
    if (window['MozWebSocket'] !== undefined) { 
    socket = new MozWebSocket('ws://server.domain.com/chat'); 
    } else { 
    socket = new WebSocket('ws://server.domain.com/chat'); 
    } 
    trails = 0; 
} catch(err){ 
    trials++; 
} 
+0

No use agente de usuario olfateando para determinar si se debe utilizar 'MozWebSocket', se debe buscar la constructor de' WebSocket' y sólo si no se puede encontrar a continuación, tratar el constructor de 'MozWebSocket'. – Neil

Respuesta

4

Esto sucede por los navegadores que está aplicando la política de seguridad que impide el uso de cualquier acceso al dominio externo que la página está alojado en sí mismo.
Esto ocurre en situaciones en las que intenta obtener conexiones importantes del área SSL a no SSL y a otro dominio (no sé si el mismo dominio resolverá el problema): ese es su caso. Pero hay más de escenarios posibles de esto.

Este es un error relacionado con el navegador, y es el navegador el que arroja este error, y no hay ningún problema con la conexión.

Tiene que alojar su servidor WebSockets bajo el mismo dominio que el servidor http. Si eso no es posible, hay algunas maneras que usted puede ir:

  1. Si el software es para uso a nivel interno como ajustes en los navegadores se puede hacer para su uso, a continuación, puede desactivar las políticas de seguridad entre dominios:
    • Firefox, en "about: config" establece s "ecurity.fileuri.strict_origin _policy" en "false".
    • Chrome, correr con la bandera "--allow-file-access-from-archivos"
  2. Si tiene acceso a la configuración DNS de su dominio, puede crear sub transitario y parecerá como si estuviera conectando al mismo dominio. No estoy seguro acerca de esta opción en la práctica, pero se ve bien.
+0

Los WebSockets se desarrollaron para admitir la comunicación entre dominios, por lo que no creo que sea probable que la causa del problema sea el navegador web. Creo que es más probable que el servidor rechace la conexión de alguna manera. Consulte [Consideraciones de origen/seguridad en WebSocket RFC] (http://tools.ietf.org/html/rfc6455#section-10) – leggetter

+3

Proporcione la versión de Firefox. Además, veo que se va del área HTTPS a no SSL (ws: //, pero no wss :: //). Eso probablemente está causando un problema. Si tiene SSL, debe usar WSS, es SSL de WebSockets. – moka

+0

El cambio a wss resolvió el problema de seguridad. Pero aún no puedo conectarme al zócalo. Creo que mi nginx conf es incorrecto. –

Cuestiones relacionadas