WebSocket na IE10 daje SecurityError

Obecnie rozwijam stronę internetową pod IE10 (na Windows 8), używając WebSockets w JavaScript. Działa dobrze pod Firefox 18 i Chrome 25, ale na IE10 dostaję SecurityError podczas nawiązywania połączenia.

To, co robię, wydaje się dość nudne:

websocket = new WebSocket('wss://hello.dev.mydomain.net');

Ale IE tego nie lubi:

SCRIPT5022: SecurityError 

Skrypt jest włączony " https://test.dev.mydomain.net " (oczywiście nie prawdziwy adres).

Martwi mnie to, że jeśli tylko dwukrotnie kliknę plik na mój lokalny komputer (np. plik://... po prostu działa. Jeszcze gorzej: jeśli używam fiddler do monitorowania ruchu HTTP... to również działa . Podczas gdy wydaje się, że nie ma żadnego połączenia bez fiddlera, zgodnie ze specyfikacją API. (Patrz poniżej.)

Sądząc po WebSocket spec , wyjątek powinien pojawić się również w Chrome/Firefox... ale tak nie jest. Więc wątpię, że ma coś związanego z HTTP / HTTPS. W każdym razie używam gniazda wsS na stronie httpS... Ponadto: kiedy ja zastąp adres wss innym poprawnym serwerem znalezionym na przykładzie online, działa.

Nie wiem czy to ma znaczenie, ale IP z test.dev.mydomain.net 10.14.X. X gdzie hello.dev.mydomain.net jest 194.247.x. x. Nie wiem czy to może wywołać jakieś zabezpieczenia tylko na IE...

Jeszcze jedno: mam certyfikat na *.dev.mydomain.net, IE nie wydaje się mieć z tym problemów. Skrypt pierwotnie znajduje się na serwerze o nazwie my.name.dev.mydomain.net ale od kiedy ja mam dostęp do niego z innego adresu URL (dostałem przekierowanie, ponieważ początkowo myśleliśmy, że może to być jakiś sam problem z Polityką pochodzenia), nie widzę, jak to może mieć znaczenie. Przynajmniej mam nadzieję, że nie...

Każdy pomysł jest mile widziany.

Edycja: dodawanie witryn do strefy zaufanej również nie działa.

Author: Jari Keinänen, 2013-02-27

7 answers

Wygląda na to, że IE rzuca SecurityError, jeśli próbujesz otworzyć websocket na lokalnej (intranet) domenie. Aby to przezwyciężyć, możesz wyłączyć automatyczny algorytm IE do rozpoznawania lokalnych stron. Można to zrobić w Tools > Internet Options > Security > Local Intranet > Sites.

ustawienia wykrywania intranetu

Odznacz wszystkie pola wyboru (lub tylko konkretne, jeśli wiesz, jak dokładnie Twoja domena znalazła się w intranecie).

Zauważ, że IE używa (między innymi) swoich ustawień proxy do określania lokalnych witryn: jeśli Twoja domena jest wymieniony jako wyłączony z proxy w Ustawieniach proxy, prawdopodobnie będzie traktowany jako intranetowy. Dlatego WebSockets działa, jeśli włączysz Fiddlera: modyfikuje ustawienia proxy IE, a tym samym zmienia się lista witryn intranetowych.

 40
Author: Georgii Ivankin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 12:42:17

Cóż, moje pytanie nie było tak udane, więc wrzucę "obejście", które znalazłem.

Mam inny adres strony, w 194.247.. też. To w magiczny sposób rozwiązało problem. Chyba IE nie lubi mieszać lokalnych i zewnętrznych rzeczy i ogląda IP.

W każdym razie, mam nadzieję, że to może się przydać każdemu, kto ma ten sam problem.

Jeśli masz rozwiązanie problemu "prawdziwego" poprzez konfigurację IE, daj mi znać:)

Pozdrawiam,

 6
Author: EldredB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-05 16:50:59

Miałem ten problem w Windows7 / IE11 po nałożeniu poprawki bezpieczeństwa. Dla Windows10 / Edge to ta sama historia.

Ponieważ jest to lokalny websocket (ws: / / localhost), musisz dodać {[0] } do konfiguracji przeglądania Internetu (Narzędzia > Opcje internetowe > bezpieczeństwo > Lokalny Intranet > witryny > zaawansowane).

Konfiguracja lokalnych witryn intranetowych IE11

W Windows 10/Microsoft Edge znajdziesz tę konfigurację w Panelu sterowania > Internet Opcje.

UPDATE

Adres Twojej webapp ( https://test.dev.mydomain.net ) należy również dodać do lokalnej strefy intranetowej . Uwaga {[3] } że w obrazku należy dodać adres webapp.

 3
Author: lmiguelmh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 23:18:38

Napotkałem błąd (chociaż nie mówił o części SCRIPT5022, raczej po prostu zgłasza "ScriptError"). Obejrzałem ten problem, klikając "Zaufane witryny", a następnie dodając maszynę hostującą zdalny websocket. Uwaga, aby dodać do zaufanych witryn,

  • Musiałem podać adres bez części " ws://" (jak tylko mymahcine.mydomain.com)

  • Musiałem odznaczyć pole z napisem "Wymagaj weryfikacji serwera https: / /" opcja.

  • Po tym jak byłem po dodaniu domeny ponownie zaznaczyłem pole "Wymagaj weryfikacji serwera (https://). Polecam wszystkim zrobić to samo. Odznaczenie pola jest tylko obejściem dla dodawania stron, które nie zaczynają się od https (raczej ws:// w moim przypadku)
 0
Author: NurAlDin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 18:50:33

Nazwa hosta klienta / adres IP powinien być taki sam jak adres IP serwera / Nazwa hosta, który nasłuchuje, w przeciwnym razie pojawi się powyższy błąd.

1) Upewnij się, czy nazwa hosta serwera skonfigurowana do nasłuchiwania w IP / localhost itp. i czy nie określa jawnie nazwy hosta AST server

2) Użyj tej samej nazwy hosta w kliencie. To rozwiąże problem. U mnie zadziałało...

 0
Author: Lokesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 12:52:04

Miałem ten sam problem w jednym z moich klientów środowiska. Okazało się, że mają konfigurację proxy, która nie pozwala na bezpośrednie połączenie z punktem końcowym WebSocket i nie obsługuje protokołu WebSocket. Tymczasowym rozwiązaniem było wyłączenie korzystania z proxy i wszystko zaczęło działać. Długoterminowym rozwiązaniem jest edycja konfiguracji proxy (.plik pac), aby wykluczyć adres punktu końcowego WebSocket.

Aby wyłączyć proxy, przejdź do: Internet Explorer Opcje > Zakładka połączenia > przycisk Ustawienia sieci LAN > odznacz Automatyczne wykrywanie ustawień.

Mam nadzieję, że to komuś pomoże.

 0
Author: DoronG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 19:50:36

Przeglądarki mają ograniczenie websocket. Na przykład Internet Explorer ma domyślny limit połączeń websocket ustawiony na 6 na nazwę nagłówka hosta. to samo ograniczenie jest ustawione dla komponentu WinForms WebBrowser.

Rozwiązaniem jest dodanie wartości pod kluczem Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER w rejestrze. Wystarczy dodać wartość DWORD z nazwą wykonywalną, na przykład iexplore.exe (lub nazwa wykonywalna aplikacji, Jeśli używasz komponentu przeglądarki internetowej) i ustaw wartość z zakresu 2..128

Drugą opcją rozwiązania SecurityException jest utworzenie wielu subdomen.

 0
Author: Rudolf Dvoracek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-17 09:31:39