2013-02-27 4 views
26

Разработчик Grettings, это мой первый quetion, поэтому не стесняйтесь сказать мне, есть ли у меня что-то неправильно.WebSocket на IE10 дает SecurityError

Fisrt, прошу прощения, если мой английский немного «сломан», это не мой родной язык. Надеюсь, я не говорю тарабарщину.

В настоящее время я занимаюсь разработкой веб-сайта под IE10 (в Windows 8) с использованием WebSockets в JavaScript. Он отлично работает под Firefox 18 и Chrome 25, но в IE10 я получаю SecurityError, когда устанавливаю соединение.

То, что я делаю, кажется, довольно straghtforward:

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

Но IE не нравится:

SCRIPT5022: SecurityError 

Сценарий на "https://test.dev.mydomain.net" (не реальный адрес, очевидно).

Меня беспокоит то, что если я просто дважды щелкнул файл на своем локальном компьютере (например, файл: // ...), он просто работает. Даже самое худшее: если я использую fiddler для мониторинга HTTP-трафика ... он также работает. В то время как, кажется, нет никакой связи без скрипача, как описано в спецификациях API. (См. Ниже.)

Судя по this, исключение должно также появляться в Chrome/Firefox ... но это не так. Поэтому я сомневаюсь, что это связано с HTTP/HTTPS. В любом случае, я использую сокет wsS на странице httpS ... Кроме того: когда я заменяю wss-адрес на другой действительный сервер, найденный в онлайн-примере, он работает.

Я не знаю, является ли это актуальным, но IP из test.dev.mydomain.net является 10.14.x.x, где hello.dev.mydomain.net - 194.247.x.x. Я не знаю, может ли это вызвать какую-либо защиту только для IE ...

Одна (более?) Последняя вещь: У меня есть сертификат для * .dev.mydomain.net, IE, похоже, не имеет проблемы с ним. Сценарий оригинально находится на сервере с именем my.name.dev.mydomain.net, но поскольку я обращаюсь к нему с другого URL-адреса (я получил перенаправление, так как мы сначала подумали, что это может быть какая-то проблема с одной и той же проблемой происхождения) Посмотрите, как это может иметь значение. По крайней мере, я надеюсь, что это не так ...

Любая идея приветствуется.

EDIT: добавление сайтов в доверенную зону также не работает.

+0

Эта проблема также возникает в FireFox, по крайней мере, в последней версии как для Windows, так и для OSX. – juminoz

+0

У меня была аналогичная проблема, но запуск с 'https: // www.websocket.org/echo.html' на адрес' ws: // '. По-видимому, это не позволяет открывать веб-сайты без SSL с страниц SSL, поэтому мне пришлось перейти на «http: // www.websocket.org/echo.html», и все было в порядке. –

+0

Правильный смешанный контент обычно блокируется, когда защищенная страница обращается к незащищенным элементам. Переключение websocket из протокола 'ws: //' в secure'wss: // 'будет обходить это, но ваш websocket должен реализовать безопасный сокет, а используемый сертификат должен быть доверен, как и любой другой сертификат SSL (либо вручную установлен или Trusted - RootCA-Intermediate). Это должно быть похоже на проблемы, которые вы получите, загружая небезопасный тег 'http: //' '' с страницы secure'https: // ', хотя и менее прозрачный из сообщения об ошибке/ошибке. – tresf

ответ

3

Ну, мой вопрос был не таким успешным, поэтому я опубликую «обходной путь», который я нашел.

У меня есть другой адрес для сайта, в 194.247 году. . тоже. Это, магически, решило это. Guess IE не любит смешивать местные и внешние вещи и смотрит на IP.

В любом случае, я надеюсь, что это может пригодиться любому, у кого есть такая же проблема.

Если у вас есть решение, чтобы решить «реальную» проблему путем настройки IE, дайте мне знать :)

Приветствия,

+0

@ У меня была аналогичная проблема. Я использую websockets instaed ajax для сохранения форм. Если я нажму «сохранить» пару раз, в разных формах, перестает работать только в IE. Консоль websocket ничего не говорит. Нет ошибок. До сих пор работает. Консоль IE просто говорит 'SCRIPT5022: SecurityError'. Я хотел бы спросить вас, как я могу получить адрес, подобный '123.456 ... 'этого' ws: // localhost: 8000' ?? Как я могу преобразовать его в числа? Спасибо ... – slevin

+0

Хм, я нашел [это] (https://github.com/SignalR/SignalR/issues/1744). Может быть, вам поможет .. – slevin

+0

Slevin, BTW Почему вы игнорируете обычную модель AJAX Client/Server для сохранения форм? Я предполагаю, что в настоящее время мы предпочли бы правильную модель, поскольку WebSockets, являющийся стандартом, все еще имеет некоторые проблемы, которые со временем будут решены. –

30

Похоже, IE бросает SecurityError, если вы пытаетесь открыть websocket на локальная (интранет) домен. Чтобы преодолеть это, вы можете отключить автоматический алгоритм IE для распознавания локальных сайтов. Это можно сделать в Tools > Internet Options > Security > Local Intranet > Sites.

intranet detection settings

Снимите все флажки (или только один конкретный, если вы знаете, как именно ваш домен действительно заканчивал в них интранета).

Обратите внимание, что IE использует (помимо прочего) настройки своего прокси-сервера для определения локальных сайтов: если ваш домен указан как исключенный из прокси-сервера в настройках прокси-сервера, то он, вероятно, будет рассматриваться как интрасеть. Вот почему WebSockets работают, если вы включаете Fiddler: он изменяет параметры прокси-сервера IE и, следовательно, изменяется список сайтов интрасети.

+6

Обратите внимание, что это также влияет на IE11. –

+0

Это хорошо работает, но оно может ломать определенные типы аутентификации passthru на корпоративном стиле. – tresf

0

Я столкнулся с ошибкой (хотя он не сказал часть SCRIPT5022, а просто сообщает «ScriptError»). Я обошел проблему, нажав «Надежные сайты», а затем добавив машину, на которой размещен удаленный веб-сайт. Обратите внимание, чтобы добавить в список надежных сайтов,

  • Я должен был указать адрес без «WS: //» часть (как только mymahcine.mydomain.com)

  • мне пришлось снять флажок в котором говорится: «Требуется проверка сервера https: //».

  • После того, как я закончил добавление домена, я снова проверил флажок «Требовать проверку сервера (https: //). Я бы рекомендовал всем сделать то же самое. Отмена флажка - это только обходное решение для добавления сайтов, которые не «т начинаются с HTTPS (а WS: // в моем случае)
+0

hmmmmm unchecking «Требовать проверку сервера» может быть небезопасным – niceman

+0

oh Я действительно проверил флажок после того, как я закончил добавление домена. Убрав этот флажок, вы можете добавить домен без префикса https. (иначе это не позволило бы мне добавить домен). Я обновил свой ответ и предостерег читателей об этом. – NurAlDin

0

клиент имя хоста/IP-адрес должен быть таким же, как сервер IP/Hostname то будет слушать иначе вы получите вышеуказанную ошибку

. 1) Убедитесь, что имя хоста сервера настроено для прослушивания на IP/localhost и т. Д. И даже не указывать явно имя хоста ast server

2) использовать одно и то же имя хоста в клиенте. Это решит проблему. Это сработало для меня ...

+1

Что делать, если они не могут быть? Как приложение работает локально, а сервер внешний, или наоборот? –

1

У меня была эта проблема в Windows7/IE11 после с применением исправления безопасности. Для Windows10/Edge эта же история.

Поскольку это локальный websocket (ws: // localhost), вы должны добавить ws:\\localhost\ в Internet Explore configuration (Инструменты> Свойства обозревателя> Безопасность> Локальная интрасеть> Сайты> Дополнительно).

IE11 local intranet sites configuration

В для Windows 10/Microsoft Край вы найдете эту конфигурацию в панели управления> Свойства обозревателя.

UPDATE

Адрес вашего веб-приложение (https://test.dev.mydomain.net) должен быть добавлен в зону местной интрасети тоже. Примечание что на изображении должен быть добавлен адрес webapp.

Смежные вопросы