рукопожатие через веб-сокет

Я пишу сервер веб-сокетов, используя С++, я ожидал рукопожатия, используя хром 17 в качестве клиента.

Когда сервер отправляет клиенту, хром ответа на рукопожатие всегда показывает следующую ошибку в консоли:

Ошибка во время рукопожатия WebSocket: несоответствие Sec-WebSocket-Accept

Событие в хроме выглядит следующим образом:

t=1328796971951 [st= 5]    WEB_SOCKET_SEND_REQUEST_HEADERS  
--> GET / HTTP/1.1   
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:38950
Origin: null     
Sec-WebSocket-Key: zMb+UCeRb+2OmMp9fpbxHw==
Sec-WebSocket-Version: 13

t=1328796971951 [st= 5]    SOCKET_STREAM_SENT     
t=1328796971971 [st=25]    SOCKET_STREAM_RECEIVED  
t=1328796971971 [st=25]    WEB_SOCKET_READ_RESPONSE_HEADERS  
--> HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: 4emBYsdkl0SxeUMGLNc0dFsI1/E=


t=1328796971972 [st=26] -REQUEST_ALIVE

Пожалуйста помоги.


person yoyo-yuan    schedule 09.02.2012    source источник
comment
Значение, которое вы отправляете в заголовке accept, неверно. Вам нужно показать свой код для вычисления приемлемого значения, иначе мы понятия не имеем, что вы делаете неправильно.   -  person kanaka    schedule 09.02.2012
comment
Спасибо, вы правы, сервер отправил неверный ключ.   -  person yoyo-yuan    schedule 10.02.2012
comment
При вычислении ключа входной ключ заканчивается на «/r/n», и именно по этой причине я всегда вывожу неправильный вывод.   -  person yoyo-yuan    schedule 10.02.2012


Ответы (1)


Значение Sec-WebSocket-Accept рассчитано неправильно.

Как рассчитать значение (псевдокод):

// Getting the Sec-WebSocket-Key from the Request header
var sec_Websocket_Key = requestHeader["Sec-WebSocket-Key"];
// Adding the magic string to sec_Websocket_key
// sha1 hash this new value
var sec_Websocket_Key_Hash = (sec_Websocket-Key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1();
// Get the Base64 String of the hash
var sec_Websocket_Accept = sec_Websocket_Key_Hash.toBase64String();
// sec_Websocket_Accept now is the correct value to set in the Header

Получите дополнительную информацию здесь

person David Gölzhäuser    schedule 06.01.2017