Были попытки получить flash файлы Socket.io для работы в Internet Explorer 9 по протоколу HTTPS/WSS. Флэш-память работает через HTTP, но HTTPS дает нам проблемы. Использовали версию socket.io 0.8.7 и версию socket.io-client 0.9.1-1.
Запустили наш сервер websocket через SSL на порту 443. Weve указал местоположение нашего файла WebsocketMainInsecure.swf(это междоменные запросы ws) в правильном месте и загружал файл в swfobject, встроенный через HTTPS.
Мы открыли порт 843 в нашей группе безопасности для нашего экземпляра EC2, и файл политики перекрестного происхождения успешно обрабатывается через HTTP. Кажется, что он не обрабатывает HTTPS (Chrome выдает ошибку SSL-соединения).
Weve попробовал две версии файла WebsocketMainInsecure.swf. Первый - это файл, предоставленный Socket.io, который построен на основе WebsocketMainInsecure.as, который не включает строку
Security.allowInsecureDomain("*");
Это вызывает ошибку SCRIPT16389: Unspecified error.
в строке WebSocket.__flash.setCallerUrl(location.href)
.
Мы полагали, что это связано с тем, что SWF файл не разрешал HTTPS-запросы, поэтому мы заменили файл WebSocketMainInsecure.swf на тот, который был найден на этом репо: https://github.com/gimite/web-socket-js, поскольку он включает
Security.allowInsecureDomain("*");
в коде ActionScript. Когда мы это использовали, мы увидели, что соединение flashsocket продолжало отсоединяться и снова соединяться в бесконечном цикле. Мы отслеживали ошибку до файла transport.js в библиотеке socket.io в функции onSocketError прототипа Transport. Он выдает ошибку:
[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]
Мы даже попробовали обновить как socket.io, так и socket.io-client до версии 0.9.6, и мы по-прежнему получили ошибку Access is denied
.
Эта ошибка была очень сложной для отладки, и теперь она не понимала, как заставить flashsockets работать. Интересно, может ли это иметь отношение к использованию более старой версии socket.io или, возможно, что наш файловый сервер политики не принимает HTTPS-запросы или, может быть, даже тот способ, с помощью которого файл WebSocketMainInsecure.swf из веб-сокета-js github репо было построено относительно того, что ожидает сокет .io-client.