WebSockets: Получение Safari для работы с расширением Apache pywebsockets - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь запустить WebSocket на сервере Apache с помощью pywebsocket.Сервер теперь настроен, и я могу установить соединение через веб-сокет через Chrome.Однако, когда я пытаюсь установить соединение через Safari, я получаю "Неожиданный код ответа: 404" , и не похоже, что соединение WebSocket может быть установлено с сервером.

Любые указатели здесь будут оценены.Ниже приведен код JS на стороне клиента, который я вызываю для установления соединения, и теги заголовка safari против тегов заголовка Chrome.

    function connect() {
        if ('WebSocket' in window) {
            socket = new WebSocket("ws://localhost/mystream");
        } else if ('MozWebSocket' in window) {
            socket = new MozWebSocket("ws://localhost/mystream");
        } else {
            return;
        }

    socket.onopen = function () {
        showResult('Opened');
    };
    socket.onmessage = function (event) {
        showResult(event.data);
    };
    socket.onerror = function () {
        showResult('Error in connection');
    };
    socket.onclose = function (event) {
        var logMessage = 'Closed (';
        if ((arguments.length == 1) && ('CloseEvent' in window) && (event instanceof CloseEvent)) {
            logMessage += 'wasClean = ' + event.wasClean;
            if ('code' in event) {
                logMessage += ', code = ' + event.code;
            }
            if ('reason' in event) {
                logMessage += ', reason = ' + event.reason;
            }
        } else {
            logMessage += 'CloseEvent is not available';
        }
        showResult(logMessage + ')');
  };

  showResult('Successfully Connected ');
}

Заголовки Safari:

Origin: http://192.168.1.8
Sec-WebSocket-Key1: 26 ~ 5 75G3 36< 0 U8T
Connection: Upgrade
Host: localhost
Sec-WebSocket-Key2: 1<A   9 4 4l865P5/6L5
Upgrade: WebSocket

Заголовки Chrome:

Connection:Upgrade
Host:localhost
Origin:http://192.168.1.8
Sec-WebSocket-Key:IAkX9XGWsCZHPQepzYjwxA==
Sec-WebSocket-Version:13
Upgrade:websocket
(Key3):00:00:00:00:00:00:00:00

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

удалось заставить его работать сейчас.Safari (5.1) и мобильное сафари требуют наличия флага Hixie-75, который имеет экспериментальную поддержку в pywebsockets.Проблема была связана с записью в файле Apache Conf. Предполагается, что запись должна быть в нижнем регистре (т. Е. на ), но образец записи имел ее в CamelCase ( На ).Возврат ко всем строчным буквам решил проблему.

0 голосов
/ 14 декабря 2011

Обновлено

Эти заголовки Safari предназначены для более старой версии протокола: Hixie-76. Hixie-76 гораздо менее удобен для интеграции с веб-серверами, потому что после заголовков отправляются специальные данные (key3). Я подозреваю, что Safari будет обновлен до более новой версии протокола (HyBi) в следующем выпуске или двух.

Рукопожатие HyBi-76 происходит в handshake / hybi00.py Вы можете попробовать добавить отладку, чтобы попытаться выяснить, где она не работает. В частности, убедитесь, что _get_challenge действительно получает последние 8 байтов (key3) запроса, отправленного после заголовков (это та часть, которая усложняет обработку Hixie-76 на веб-сервере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...