Задать вопрос
@Dementor
программист, архитектор, аналитик

Проблема с куками — handshake error при использовании socket.io

Наш программист сделал сайт на базе движка Node.JS и на его локальном компьютере все работает замечательно — и при обращениях с локалхоста и при обращениях по сети. Размещаю это творение на наш сервер и ставлю весь список модулей которые он использует. Не работает…

Разбор полетов показал, что сценарий из файла socket.io.min.js вызывает с сервера 192.168.122.252:3000/socket.io/1/?t=1379433566379 На сервере это вызывает обработчик описанный в следующем блоке кода:

io.configure(function (){
  io.set('authorization', function (handshakeData, callback) {
    // некоторый код по анализу
  });
});


после отработки сервер выдает в консоль сообщение: " warn — handshake error", а на клиент возвращает текст «handshake error». Ситуация повторяется стабильно при тесте из браузеров на самом сервере и из его сети.

Добавил от себя в процедуру авторизации сериализацию JSON параметра handshakeData и получил на сервере результат:

Coockie: {"headers":{"host":"192.168.122.252:3000","connection":"keep-alive","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","user-agent":"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36","accept-encoding":"gzip,deflate,sdch","accept-language":"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"},"address":{"address":"192.168.122.135","port":3146},"time":"Tue Sep 17 2013 19:16:16 GMT+0300 (EEST)","query":{"t":"1379433566379"},"url":"/socket.io/1/?t=1379433566379","xdomain":false,"issued":1379434576801}

А вот у разработчика на его рабочей машине в хидерах еще есть куки и потому содержимое обработчика авторизации успешно выполняется, варнинг не генерируется и веб-служба работает:

Coockie: {"headers":{"host":"localhost:3000","connection":"keep-alive","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36","accept":"*/*","referer":"http://localhost:3000/","accept-encoding":"gzip,deflate,sdch","accept-language":"en-US,en;q=0.8","cookie":"auth.sid=s%3APjHB8aINSzgpvDqgPLtcwkSp.VVyPsLtWzyJKzooaePC2Yg1WaISVp5ew6x1e88jGhLY"},"address":{"address":"127.0.0.1","port":44417},"time":"Tue Sep 17 2013 19:02:40 GMT+0300 (EEST)","query":{"t":"1379433760241"},"url":"/socket.io/1/?t=1379433760241","xdomain":false,"issued":1379433760263}

Что я уже второй день упускаю? Может нужны какие-то специфические настройки для Express?
  • Вопрос задан
  • 5412 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
pomeo
@pomeo
сессии хранятся где? строка express.session(?)
express 2 или 3?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Anonym
@Anonym
Программирую немного )
Есть ли кука в браузере вообще?
Если есть, то она может не передаваться, если клиент и сервер на разных доменах (или используется https)? Копать в сторону заголовков Access-Control-Allow-Origin и Access-Control-Allow-Credentials.

Для полноты картины выложите заголовки запроса и ответа (их можно прямо в браузере посмотреть) и домены клиента и сервера.
Ответ написан
max_mara
@max_mara
Я конечно не уверен в чем дело, но так, чисто гипотетически, может у кук стоит httpOnly параметр?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы