2012-04-26 37 views
5

Próbuję połączyć się z websocket na server.domain.com z trial.domain.comKrzyż Domain websocket połączenie powodując NS_ERROR_DOM_SECURITY_ERR

NS_ERROR_DOM_SECURITY_ERR Firefox:

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

gdy próbuję utworzyć połączenie 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

Nie powinieneś używać wąchania agenta użytkownika do określenia, czy używać 'MozWebSocket', powinieneś szukać konstruktora' WebSocket' i tylko jeśli nie możesz go znaleźć, spróbuj użyć konstruktora 'MozWebSocket'. – Neil

Odpowiedz

4

Dzieje się tak przez przeglądarki, które stosują politykę bezpieczeństwa, która uniemożliwia korzystanie z dostępu do zewnętrznej domeny, że strona jest hostowany jako samodzielny.
Występuje to w scenariuszach, gdy próbujesz uzyskać ważne połączenia z obszaru SSL do innego niż SSL i innej domeny (nie wiesz, czy ta sama domena rozwiąże problem) - tak właśnie jest w twoim przypadku. Ale jest więcej możliwych scenariuszy tego.

Jest to błąd związany z przeglądarką, a to przeglądarka, która wyrzuciła ten błąd i nie ma problemu z samodzielnym połączeniem.

Musisz hostować swój serwer WebSockets w tej samej domenie co serwer http. Jeśli nie jest to możliwe, istnieje kilka sposobów, można przejść:

  1. Jeśli oprogramowanie jest do stosowania wewnątrzobiektowych i ustawienia w przeglądarkach może być wykonane do użytku, można wyłączyć polityki bezpieczeństwa cross-domain:
    • Firefox pod "about: config" ustaw "ecurity.fileuri.strict_origin _policy" na "false".
    • Chrome, uruchom z flagą "--allow-file-access-from-Files"
  2. Jeśli masz dostęp do ustawień DNS domeny, można utworzyć sub spedytora i będzie wyglądać jak jesteś połączenie z tą samą domeną. Nie jestem pewien co do tej opcji w praktyce, ale wygląda dobrze.
+0

WebSockets zostały opracowane w celu obsługi komunikacji między domenami, więc nie sądzę, że przyczyną problemu jest przeglądarka internetowa. Sądzę, że jest bardziej prawdopodobne, że serwer odrzuca połączenie w jakiś sposób. Patrz [rozważania Origin/bezpieczeństwa w RFC websocket] (http://tools.ietf.org/html/rfc6455#section-10) – leggetter

+3

Proszę podać wersję Firefoksa. Jak widzę, przechodzisz z obszaru HTTPS na non SSL (ws: //, ale nie wss :: //). To prawdopodobnie powoduje problem. Jeśli korzystasz z protokołu SSL, powinieneś użyć WSS - jest to protokół SSL WebSockets. – moka

+0

Przełączenie na wss rozwiązało problem bezpieczeństwa. Ale nadal nie mogę się połączyć z gniazdem. Myślę, że moja nginx conf jest niepoprawna. –

Powiązane problemy