Сервер не отправляет ответ HTTP 101 при создании веб-сокета с использованием CC3000 и socket.io
Я подключаю CC3000 к серверу node.js, используя socket.io. Я использовал следующую библиотеку для создания веб-сокета https://github.com/chadstachowicz/socket_io_arduino_cc3000
В SocketIOClient.cpp он создает TCP-соединение, получает идентификатор сеанса (sid). Он отключает и создает другое TCP-соединение и использует sid для обновления соединения до websocket. Для этого клиент (здесь CC3000) отправляет следующую информацию заголовка:
client.print(F("GET /socket.io/1/websocket/"));
client.print(sid);
client.println(F(" HTTP/1.1"));
client.print(F("Host: "));
client.println(hostname);
client.println(F("Origin: ArduinoSocketIOClient"));
client.println(F("Upgrade: WebSocket")); // must be camelcase ?!
client.println(F("Connection: Upgrade\r\n"));
После этого запроса клиент ожидает ответа HTTP 101 от сервера. Но сервер не отправляет никакого ответа. Это регистрирует как предупреждение "соединение websocket недействительно" и завершает соединение.
Подходит ли протокол для создания websocket или в шапке отсутствует информация?
Кроме того, я хочу знать, какой должна быть ценность "Происхождения"? Во время первого рукопожатия это "Arduino", тогда как во втором рукопожатии это "ArduinoSocketIOClient".
1 ответ
Вы скучаете по Sec-WebSocket-Key
а также Sec-WebSocket-Version
Заголовки, ключевая часть рукопожатия протокола WebSocket.
Вот как выглядит настоящее рукопожатие:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com