我正在編寫一個C++ websocket服務器,在鉻上的開發工具表示sec-websocket-accept標頭值不正確。我已經測試了幾天,這一切似乎都很好。儘管它在chrome開發工具中顯示爲101,但客戶端在readystate 3關閉的情況下沒有調用websocket onopen。Websocket握手Sec-WebSocket-Accept標頭值不正確
這是我的用於計算鍵
string magickey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
string key = msgkey.append(magickey);
unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(), nullptr);
string acceptkey = base64_encode(reinterpret_cast<const unsigned char*>(sha_str), strlen((char*)sha_str));
string handshake_response = "HTTP/1.1 101 Switching Protocols\r\n";
handshake_response.append("Upgrade: websocket\r\n");
handshake_response.append("Connection: Upgrade\r\n");
handshake_response.append("Sec-WebSocket-Accept: "+acceptkey+"\r\n");
handshake_response.append("\r\n");
鉻響應
HTTP/1.1 101交換協議
升級代碼:網頁套接字
連接:升級
仲丁基的WebSocket - 接受:5T5MvxP1iz40vLpi3kQs/ifDaCo =
Chrome請求
GET ws:// localhost:4897/echo HTTP/1.1
主機:本地主機:4897
連接:升級
附註:無緩存
緩存控制:無緩存
升級:網頁套接字
產地:http://localhost
仲丁基的WebSocket-版本:13
用戶-Agent:Mozilla/5.0(Windows NT 6.3; WOW64)爲AppleWebKit/537.36(KHTML,例如Gecko)鉻/ 47.0.2526.106 Safari瀏覽器/ 537.36
接受編碼:gzip,放氣,SDCH
接受語言:EN-US,EN; Q = 0.8
仲丁基的WebSocket -Key:LKF8lHGznbKGIgO1UzAOhg ==
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
它說「在WebSocket握手期間錯誤:不正確'Sec-WebSocket-Accept'標頭值」。
Chrome還顯示一個額外的幀接收大小79字節操作碼-1。
謝謝堆!
'acceptkey'的價值是什麼? – Ilya
謝謝,我列出了問題 – xmxmxmx
鍵值你有試過用'\ N',而不是'\ r \ N'?另外,Chrome輸出中的代碼順序看起來不一樣(來自您的代碼)。 – Ilya