Неожиданный код ответа: 426 с клиентом PhantomJS Websocket/ROSLIB

Я пытаюсь использовать PhantomJS (1.9.7) для настройки сценария пакетного тестирования для управления нашим программным обеспечением для робототехники через наш сервер Websocket (RosBridge, который реализован поверх Tornado).

Мы используем ROSLIBJS, библиотеку JS, которая использует стандартный HTML5 WebSocket API для взаимодействия с сервером. Я бы предпочел использовать NodeJS вместо PhantomJS, но в ROSLIBJS есть зависимости, которые требуют наличия структур DOM браузера. Кто-то портировал ROSLIBJS для NodeJS. Я запустил его, но были критические ошибки, из-за которых его нельзя было использовать. Следовательно, мне нужен PhantomJS.

По этой ссылке есть некоторая несовместимость с протоколом Websocket. Неожиданный код ответа 426

Это известная проблема. Если да, то когда будет исправлен PhantomJS, чтобы это работало? Могу ли я легко исправить PhantomJS самостоятельно?


person Calvin Cheng    schedule 17.04.2014    source источник


Ответы (2)


Http 426 может означать, что вы пытаетесь подключиться с неподдерживаемой версией протокола веб-сокета. Проверьте, есть ли в ответе http-заголовок «sec-websocket-version» со списком поддерживаемых версий.

Какую версию использует ваш клиент?

Кроме того, если вы подключаетесь через прокси-сервер, прокси-сервер может удалить заголовок «обновление» из запроса, поскольку он помечен как заголовок «подключение». Переключитесь на WSS://, чтобы предотвратить это.

person vtortola    schedule 17.04.2014

Как ни странно, я искал интеграционные тесты для roslibjs и наткнулся на этот вопрос. Я попробую phantomjs-2.0 (https://github.com/Vitallium/phantomjs-qt5 ) и настоящий хром через chromedriver. Мне больше всего нравится PR результаты против roslibjs.

Альтернативным вариантом было бы написать еще один мост, который использует socket.io для связи с клиентом, чтобы добиться максимальной переносимости.

См. этот PR: https://github.com/RobotWebTools/roslibjs/pull/83 . Он использует хром для запуска тестов. В качестве альтернативы вы можете разрешить rosbridge принимать веб-сокеты draft76, изменив https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/src/tornado/websocket.py#L186, чтобы вернуть True;

person syrnick    schedule 01.06.2014