我无法连接到我的websocket,因为它的握手Sec-WebSocket-Accept标头值不正确

时间:2015-11-01 12:42:07

标签: javascript php websocket

我正在进行第一次测试,尝试使用 phpwebsocket

我将握手Sec-WebSocket-Accept标头值设置为以下内容:

$accept=base64_encode(SHA1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
/* $key has $buffer value */

所以我运行websocket php文件(创建一个连接),好吧。

所以我运行我的测试html,其中包含一个尝试连接到我正在使用的phpwebsocket的脚本,并且在浏览器控制台中我收到此错误:

fc.js:43 WebSocket connection to 'ws://localhost:8000/PetStack/inc/server.php' failed: Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value

但是我发现这个Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value with PHP,通过定义缓冲区限制来解决,会是我的问题吗?

我不明白如何定义缓冲区限制,但是这是我的问题,请解释一下。

这不是我制作这个phpwebsocket,我只是使用它。

嗯,这是phpwebsocket文件中的变量$upgrade行,它设置了一些标题。

                "HTTP/1.1 101 Web Socket Protocol Handshake\r\n".
                "Upgrade: WebSocket\r\n".
                "Connection: Upgrade\r\n".
                "WebSocket-Origin:{$origin}\r\n".
                "Sec-WebSocket-Accept:".$accept."\r\n\r\n".
                "WebSocket-Location: ws://{$host}{$resource}\r\n\r\n".
                chr(0);

1 个答案:

答案 0 :(得分:1)

你的握手看起来很奇怪。

没有Websocket-OriginWebsocket-Location标题,你在最后两个标题之间做了一个双断点。

您的回答应该更像这样:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

所以尝试这样的事情:

"HTTP/1.1 101 Switching Protocols\r\n".
"Upgrade: WebSocket\r\n".
"Connection: Upgrade\r\n".
"Sec-WebSocket-Accept: {$accept}\r\n\r\n"